Mysql
 sql >> Database >  >> RDS >> Mysql

PHP PDO MySQL IN (?,?,?

Questo non è possibile nel modo in cui lo provi. Devi avere un segnaposto separato per ogni parametro che vuoi passare, tutto il resto sarebbe contrario allo scopo dei parametri (che è separare il codice dai dati).

$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);

Se ti fosse consentito passare una matrice di valori a un singolo parametro durante il collegamento, ti sarebbe effettivamente consentito modificare l'istruzione SQL. Questa sarebbe una scappatoia per SQL injection:nulla potrebbe garantire che tutti i valori dell'array siano interi innocenti, dopotutto.