PDO kullanma: [1]
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
$statement = $pdo->prepare($select);
$statement->execute($ids);
MySQLi Kullanımı [2]
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
$statement = $mysqli->prepare($select);
$statement->bind_param(str_repeat('i', count($ids)), ...$ids);
$statement->execute();
$result = $statement->get_result();
Açıklama:
IN()
Belirli bir listede bir değerin olup olmadığını kontrol etmek için SQL operatörünü kullanın .
Genel olarak şöyle görünür:
expr IN (value,...)
Dizimizin içine yerleştirmek için bir ifade oluşturabiliriz ()
. Parantez içinde en az bir değer olması gerektiğine dikkat edin, yoksa MySQL bir hata döndürür; bu, girdi dizimizin en az bir değerinin olduğundan emin olmak anlamına gelir. SQL enjeksiyon saldırılarına karşı önlemeye yardımcı olmak için, önce ?
her girdi öğesi için parametreli bir sorgu oluşturmak üzere bir tane oluşturun. Burada kimlikleri içeren dizinin çağrıldığını varsayıyorum $ids
:
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
Verilen üç öğeden oluşan bir giriş dizisi $select
şöyle görünecektir:
SELECT *
FROM galleries
WHERE id IN (?, ?, ?)
Yine ?
, girdi dizisindeki her öğe için bir tane olduğunu unutmayın . Ardından, sorguyu yukarıda belirtildiği gibi hazırlamak ve yürütmek için PDO veya MySQLi kullanacağız.
IN()
İşleci dizelerle kullanma
Bağlı parametreler nedeniyle dizeler ve tamsayılar arasında geçiş yapmak kolaydır. PDO için herhangi bir değişiklik gerekmez; MySQLi değişim için str_repeat('i',
için str_repeat('s',
size dizeleri kontrol etmek gerekiyorsa.
[1]: Kısalık için bazı hata denetimlerini atladım. Her veritabanı yöntemi için olağan hataları kontrol etmeniz (veya DB sürücünüzü istisnalar atacak şekilde ayarlamanız) gerekir.
[2]: PHP 5.6 veya üstü sürüm gerektirir. Yine kısalık için bazı hata denetimini atladım.