Merhaba arkadaşlar bu yazımda sizlere PDO ile Select işlemlerinden bahsedeceğim. Bildiğiniz üzere bir önceki yazım da PDO ile CRUD işlemlerinden Create, Update ve Delete kısımlarını anlatmıştım ve Read kısmını bir sonraki yazımda anlatacağımdan bahsetmiştim. Read kısmı işte Select işlemine karşılık geliyor.

PDO ile SELECT işlemini anlatmadan önce eğer MySQL ile nasıl veri listeleneceğini bilmiyorsanız buraya tıklayınız. Şimdi PDO ile SELECT işlemlerinin nasıl yapılacağını anlatmaya başlayabilirim.

Öncelikle bu işlemi yapacağım örnek tablonun içeriğinden bahsetmek gerekirse

users isimli tablo

Şimdi öncelikle PDO bağlantımızı yaparak başlayalım.

$db = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "root");

şeklinde bir PDO bağlantısını başlattık. Şimdi users tablosundan veri çekmeye başlayalım.

fetchAll ile Veri Çekme

fetchAll ile birden fazla veri çekeriz.

<?php 

$query = $db->prepare('SELECT * FROM users');
$query->execute([]);
$list = $query->fetchAll(PDO::FETCH_ASSOC);


?>

Burada öncelikle bilmemiz gereken iki durum var öncelikle eğer tabloda birden fazla veri çekeceksek “fetchAll” komutunu kullanıyoruz eğer sadece 1 adet veri çekmek istersek “fetch” olarak da kullanabiliriz.

fetch ile Veri Çekme

fetch ile sadece 1 adet veri çekeriz yukarıdaki sorgunun aynısını yazarsak bize sadece en son eklenmiş olan verinin bilgilerini döndürecektir.

$query = $db->prepare('SELECT * FROM users');
$query->execute([]);
$arr = $query->fetch(PDO::FETCH_ASSOC);

 

Bu 2 kullanımında belirli özellikleri vardır. Eğer fetchAll ile çalıştırdığımız sorgudan herhangi bir veri dönmezse bize boş bir dizi döner. Fakat fetch ile sorgumuzu çalıştırdıktan sonra herhangi bir veri dönmezse bize boolean bir değer döndürür.

Bilmemiz gereken ikinci durum ise PDO::FETCH_ASSOC’un bir kaç adet alternatifi vardır bunlar

  • PDO::FETCH_ASSOC -> Dönen dizinin indisleri sütun adları ile aynıdır.
  • PDO::FETCH_BOTH -> Dönen dizinin indisleri 0’dan başlayarak ilerler.
  • PDO::FETCH_BOUND -> Sütun değerlerini PDOStatement::bindColumn() ile ilişkilendirilmiş PHP değişkenlerine atar ve TRUE döndürür.

gibi 3 adet bahsedeceğim ve 4 adette bahsetmediğim çeşitleri var bunlar benim en çok kullandıklarını gördüklerim. Ben genel olarak PDO::FETCH_ASSOC kullanarak projelerimi geliştiriyorum.

 

Şimdi çalıştırdığımız sorgudan bize veri dönüp dönmediğini anlamak için ne yapmamız gerekiyor diye sorarsanız.

fetchAll ile Dönen Veri Sayısını Hesaplama

fetchAll’da bize geri dönecek bir veri yoksa bile boş bir dizi olarak geri döner. Yani dizinin eleman sayısını hesaplamamızı sağlayan count() fonksiyonumuzu kullanmamız gerekiyor. Yani

if(count($list) > 0 ){
     print_r($list);
}else{
     echo "Sorgudan herhangi bir veri geri dönmedi";
}

şeklinde bir sistemimiz olabilir.

fetch ile Veri Gelip Gelmediğini Kontrol Etmek

fetch ile veri gelirse bize bir dizi döner eğer veri dönmezse boolean bir değer döner. O zaman sadece dizi olup olmadığını kontrol etmek bizim için yeterli olacaktır.

if(is_array($list)){
    // DÖNEN VERİ YAPILACAK İŞLEMLER
}else{
    echo "Sorgudan herhangi bir veri dönmedi";
}

şeklinde olacaktır.

Özet,

Bu yazımda sizlere PDO ile SELECT işlemlerinin nasıl yapılacağından bahsettim. SELECT işlemi ile çoklu veri çekme ve sadece 1 veri çekme işlemlerinden bahsettim. Bu iki işleme göre bize veri gelip gelmediğini nasıl kontrol edeceğimizden bahsettim. Ayrıca bize dönen dizilerin indislerinin farklılık göstermesinin nasıl olacağından bahsettim.

Bir sonraki yazımda sizlere PDO ile GROUP BY ve GROUP_CONCAT() kullanımından bahsedeceğim. O zamana kadar PHP hakkında yazmış olduğum diğer yazıları görmek için buraya tıklamanızı ve bu yazı boyunca kullandığım SQL sorgularını anlamadıysanız MySQL ile alakalı yazdığım yazılarımı incelemenizi tavsiye ederim.