PDO ile Veritabanından Dizideki ID'lere Göre Veri Çekme
Merhaba dostlar.
$array = array('0' => 6, '1' => 9, '2' => 8);
$query = $db -> prepare("SELECT * FROM items WHERE item_id = :id");
$query -> execute(['id' => $array]);
$row = $sector_query -> fetchAll(PDO::FETCH_ASSOC);
foreach ($row as $item) {
echo $item['name'];
}
Veritabanından verilerimi çekerken dizinin içinde bulunan id'lere göre çekmem gerekiyor. Örnek olarak verdiğim kodda 6,9,8 ID'li item'ların isimlerini listelemem gerekiyor.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (3)
Merhabalar,
@smtblt16 hocam cevap vermiş ancak bu çok da uygun bir yöntem olmadığını düşünüyorum bunun. Bunun gibi işlemlerin yapılabilmesi için çok güzel bir fonksiyon var, fonksiyonumuzun ismi IN()
Fonksiyonla ilgili güzel bir kaynak bırakayım şuraya: https://www.w3resource.com/mysql/comparision-functions-and-operators/in-function.php
Örnek bir kullanım da vereyim hemen kısaca. Diyelim ki tablomuzdan 6, 9 ve 8 id'li verileri çekeceğiz. Sorgumuz şu şekilde olacak.
SELECT * FROM items WHERE item_id IN(6, 9, 8)
IN ifadesinden sonra parantez içerisinde verdiğiniz her değeri kontrol ediyor ve bu değerlerden herhangi birisiyle eşleşen bir id değeri olup olmadığına bakıyor. Eşleşen değerleri döndürüyor.
PHP'deki diziyi buraya koymak isterseniz de şu şekilde bir kullanıma gidebilirsiniz.
$array = array('0' => 6, '1' => 9, '2' => 8);
$query = $db -> prepare("SELECT * FROM items WHERE item_id IN (" . implode(",", $array) . ")");
Ancak burada da ufak bir handikap var. Normal şartlar altında kullanıcıdan gelen verileri direkt olarak yazmamız gerekiyor. Direkt yazdığımız zaman prepared statement dediğimiz şeyin çok bir anlamı kalmamış oluyor.
Bunun önüne geçmek için de bu konuyla ilgili olarak Stackoverflow'da sorulan soruya verilen şu cevabı inceleyebilirsiniz: https://stackoverflow.com/questions/14767530/php-using-pdo-with-in-clause-array
Çok uzun zamandır PDO kullanmıyorum. Belki bir şeyleri yanlış söylemiş olabilirim.
Eğer eksik veya yanlış söylediğim bir şey olduğunu düşünüyorsanız lütfen bildirin.
Teşekkür ederim, iyi çalışmalar dilerim.
Değişken bir sql sorgusuna ihtiyacın olduğu için where kısmını id sayısına göre şekillendirebilirsin...
$ids = array(6, 9, 8);
$where = 'WHERE item_id = ?';
for ($i = 1; $i < count($ids); $i++) {
$where .= ' OR item_id = ?';
}
$query = $db -> prepare("SELECT * FROM items $where");
$query -> execute($ids);
$row = $query -> fetchAll(PDO::FETCH_ASSOC);
foreach ($row as $item) {
echo $item['name'];
}