Tableau associatif PHP Implode
Donc je suis en train de créer une fonction qui génère une chaîne de requête SQL basé sur un multi-dimensionnelle tableau.
Exemple:
function createQueryString($arrayToSelect, $table, $conditionalArray) {
$queryStr = "SELECT ".implode(", ", $arrayToSelect)." FROM ".$table." WHERE ";
$queryStr = $queryStr.implode(" AND ",$conditionalArray); /*NEED HELP HERE*/
return $queryStr;
}
$columnsToSelect = array('ID','username');
$table = 'table';
$conditions = array('lastname'=>'doe','zipcode'=>'12345');
echo createQueryString($columnsToSelect, $table, $conditions); /*will result in incorrect SQL syntax*/
comme vous pouvez le voir j'ai besoin d'aide avec la 3e ligne, comme c'est actuellement l'impression
SELECT ID, nom d'utilisateur à PARTIR de la table OÙ
nom ET code postal
mais il devrait être l'impression
SELECT ID, nom d'utilisateur à PARTIR de la table OÙ
lastname = 'untel" ET zipcode = '12345'
source d'informationauteur st4ck0v3rfl0w
Vous devez vous connecter pour publier un commentaire.
Vous n'êtes pas vraiment implosion d'un tableau multidimensionnel. $conditions est un tableau associatif.
Suffit d'utiliser une boucle foreach, à l'intérieur de votre fonction createQueryString(). Quelque chose comme cela devrait fonctionner, remarque c'est non testé.:
Remarque: Pour éviter les injection SQL, les valeurs doivent être échappé et/ou de la cité comme appropriées ou nécessaires pour la DB emploi. Ne vous contentez pas de copier et coller; pensez!
Pas testé, mais quelque chose comme cela devrait fonctionner. De cette façon, vous pouvez vérifier si $item est un tableau et utiliser DANS ces cas.
Vous devrez écrire une fonction pour traiter les
$conditionalArray
c'est à dire le traitement de la$key => $value
et à la manipulation des types, par exemple en appliquant les citations, si ils sont de la chaîne.Sont que vous venez de traiter avec
=
état? Qu'en estLIKE
<
>
?Pardonnez-moi si ce n'est pas trop sexy !
Donc la sortie sera qqch comme :
Je vous le déconseille automatisé des conditions de la création.
Votre cas est trop locale, alors qu'il peut être beaucoup d'autres opérateurs COMME, DANS, ENTRE, <, >, etc.
Un peu de logique, y compris plusieurs ANDs et ORs.
La meilleure façon est de façon manuelle.
Je suis toujours en train de faire de telles choses de cette façon
Mais si vous voulez toujours avec ce tableau simple, juste de le parcourir à l'aide de
et puis de combiner ces variables dans la façon dont vous avez besoin. vous avez 2 options: faire un autre tableau de ce avec
field='value'
paires et puis d'imploser, ou tout simplement concaténer, et substr fuiteAND
à la fin.J'utilise une variante de cette:
C'est rude, mais fonctionne.
Ici est une version de travail:
Je sais que c'est pour le cas d'un pdo mysql de type.. mais ce que j'ai à faire est de construire aop wrapper méthodes, et dans ce cas je ne cette fonction qui permet de construire la chaîne, depuis que nous travaillons avec les clés, il n'est pas possible de mysql injecter, car je sais que les touches que j'définir /accepter manuellement.
imaginer ces données:
vous avez défini utils méthodes...
alors la requête lier constructeur array ( j'ai pu l'utilisation directe de la matrice de référence, mais permet de simplifier):
puis vous exécutez...
Vous pouvez également opter pour une mise à jour facile avec...
Essayer cette