v2.5.2
Giriş yap

PDO ile Veritabanından Dizideki ID'lere Göre Veri Çekme

redline
7,106 defa görüntülendi ve 3 kişi tarafından değerlendirildi

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.

Cevap yaz
Cevaplar (3)
baydeveloper
1842 gün önce

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.

redline
1842 gün önce

@smtblt16 teşekkür ederim hocam. :)

smtblt16
1843 gün önce

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'];
    }