PHP PDO MySQL IN (???

1 Cevap php

Ben gibi bir MySQL açıklama yazmak istiyorum:

SELECT * FROM someTable WHERE someId IN (value1, value2, value3, ...)

Burada hile ben önde IN () orada olacak kaç değerler zaman bilmiyorum olmasıdır.

Açıkçası bu bir döngüde çalışacak beri ben bir PDO PreparedStatement ile bunu yapabileceğini ancak, ben merak ediyorum, ben dize manipülasyonlar ile halindeyken sorgu oluşturmak biliyorum.

Gibi bir şey:

$query = $PDO->prepare('SELECT * FROM someTable WHERE someId IN (:idList)');
$query->bindValue(':idList', implode(',', $idArray));

Bu mümkün mü?

1 Cevap

Bu deneyin yol mümkün değildir. Eğer geçmek istediğiniz her parametre için ayrı bir yer tutucu olması gerekir, her şey (veri kodu ayıran) parametrelerin amacını meydan olacaktır.

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

Eğer bağlama sırasında tek bir parametre için değerler dizisini geçmesine izin olsaydı, etkili SQL deyimini değiştirmek için izin verilecek. Bu, SQL enjeksiyon için bir kaçamak olacak - şey Tüm dizi değerleri, tüm sonra, masum tamsayı olacağını garanti verebilir.