Paramètres de liaison pour la clause WHERE IN avec PDO
Lors de l'utilisation de PDO pour exécuter une requête avec une clause WHERE IN, la liaison des paramètres peut ne pas fonctionner comme prévu. Comme le démontre l'extrait de code fourni, la liaison d'une liste de valeurs séparées par des virgules au paramètre :ids entraîne un décompte de 1, bien qu'il y ait plusieurs valeurs dans le tableau.
Explication
Le problème réside dans la façon dont la clause IN s'attend à ce que les valeurs soient formatées. Lors de la liaison d'un tableau, PHP combine tous les éléments en une seule chaîne, qui est traitée comme un paramètre par la base de données. Cela entraîne l'exécution de la requête suivante :
SELECT foo FROM bar WHERE ids IN ('1,2,3')
Cependant, la clause IN nécessite que chaque valeur soit un paramètre individuel :
SELECT foo FROM bar WHERE ids IN (1, 2, 3)
Solution
Pour résoudre ce problème, il faut insérer manuellement la liste IN dans la chaîne de requête :
'SELECT foo FROM bar WHERE ids IN (' . $myArray .')'
Alternativement, on peut utiliser la méthode bindParam pour lier des valeurs individuelles plutôt qu'un tableau.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!