Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHP PDO MySQL IN (?,?,?

Ce n'est pas possible de la façon dont vous l'essayez. Vous devez avoir un espace réservé séparé pour chaque paramètre que vous souhaitez transmettre, tout le reste défierait l'objectif des paramètres (qui est de séparer le code des données).

$ids = array(2, 4, 6, 8);

// prepare a string that contains ":id_0,..,:id_n" and include it in the SQL
$plist = ':id_'.implode(',:id_', array_keys($ids));
$sql   = "SELECT * FROM someTable WHERE someId IN ($plist)";
// prepare & execute the actual statement
$parms = array_combine(explode(",", $plist), $ids);
$stmt  = $PDO->prepare($sql);
$rows  = $stmt->execute($parms);

Si vous étiez autorisé à transmettre un tableau de valeurs à un seul paramètre lors de la liaison, vous seriez effectivement autorisé à modifier l'instruction SQL. Ce serait une faille pour l'injection SQL - rien ne pourrait garantir que toutes les valeurs du tableau seraient des entiers innocents, après tout.