Question :
Lors de la tentative de liaison des paramètres à une clause WHERE IN à l'aide PDO, le nombre résultant est toujours un, contrairement à l'insertion manuelle de valeurs sans paramétrage. Quelle est la cause de cet écart ?
Code :
$myArray = implode($myArray, ','); $sth = $dbh->prepare('SELECT foo FROM bar WHERE ids IN (:ids)'); $sth->bindParam(':ids', $myArray); $sth->execute(); $result = $sth->fetch(); echo $sth->rowCount();
Réponse :
Malheureusement, les objets de données PHP (PDO) ne prend pas directement en charge les paramètres de liaison pour les clauses IN. Le tableau $myArray est traité comme une chaîne unique, similaire à ce SQL :
SELECT foo FROM bar WHERE ids IN ('1,2,3')
Malgré la présence de plusieurs valeurs séparées par des virgules, la base de données les interprète comme une seule valeur de chaîne.
Pour obtenir le comportement souhaité, les clauses IN doivent être insérées manuellement dans la requête comme suit :
'SELECT foo FROM bar WHERE ids IN (' . $myArray .')'
Malheureusement, il n'y a pas d'alternative mécanisme de liaison des paramètres dans les clauses IN de PDO à ce stade.
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!