sql >> Database >  >> RDS >> Mysql

PHP PDO MySQL IN (?,?,?

Dit is niet mogelijk zoals u het probeert. Je moet een aparte tijdelijke aanduiding hebben voor elke parameter die je wilt invoeren, al het andere zou het doel van parameters (het scheiden van code van gegevens) tarten.

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

Als u tijdens de binding een reeks waarden aan een enkele parameter zou mogen doorgeven, zou u in feite de SQL-instructie mogen wijzigen. Dit zou een maas in de wet zijn voor SQL-injectie - niets kan garanderen dat alle arraywaarden tenslotte onschuldige gehele getallen zijn.




  1. Database-ontwerp 101

  2. Hoe maak ik een cirkeldiagram dat de hoeveelheid weergeeft van iets dat door iedereen is geregistreerd?

  3. Hoe RAND() deterministisch te maken in SQL Server

  4. Hoe MySql op te lossen:grootte van indexkolom te groot (Laravel migreren)