Tagphp pdo

PDO SELECT (Veri Seçme) İşlemi

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.

PDO CRUD

Merhaba arkadaşlar bir önceki yazımla birlikte PDO’ya genel olarak bir giriş yapmıştık şimdi ise PDO ile CRUD işlemleri nasıl yapılır bunlardan bahsedeceğim. Bütün yazı boyunca sorgularımı prepare ederek kullanacağım bu bahsettiklerimden bir şey anlamıyorsanız öncelikle bir önceki yazımı okumanızı tavsiye ederim.

Bu yazıma öncelikle CRUD’un ne olduğundan bahsederek başlayacağım daha sonra ise PDO kullanarak bu işlemlerin nasıl gerçekleştireceğinden bahsedeceğim.

CRUD Nedir ?

CRUD, Create Read Update Delete kavramlarının baş harflerini almış bir kısaltmadır yani türkçesi Oluştur, Oku, Güncelle ve Silme işlemlerine biz genel olarak CRUD adını veriyoruz. Şimdi bu CRUD işlemlerini PDO ile nasıl yapabiliriz diye sorarsanız bu yazımda sadece Create, Update ve Delete kısmından bahsedeceğim. READ kısmından ise detaylı bir şekilde bir sonraki yazımda bahsedeceğim.

PDO Create (INSERT) İşlemi

PDO ile veri eklemek yani INSERT işlemini yapmak aslında çok basittir. Tek yapmamız gereken bir PDO bağlantısı oluşturmak ve önce sorgumuzu prepare edip daha sonra execute ederek işlemimizi tamamlamak şimdi bu işlemi koda dökmeye başlayalım.

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

şeklinde bir veri tabanı bağlantımı sağlamış oldum şimdi veri eklemesi yapacağım tablodan bahsetmek gerekirse tablomuz şu şekildedir.

explain users komutunun görüntüsü

şeklindedir şimdi biz bu users tablosuna yeni bir kullanıcı ekleyelim.

$query = $db->prepare('INSERT INTO users SET username = ?, user_pass = ?, mail = ?');
$add = $query->execute(['aydncn','test','aydncn@test.com']);

şeklinde sorgumuzu çalıştırabiliriz. Şimdi biz bu sorguyu çalıştırdık ama gerçekten veri ekledimi bunu nasıl kontrol edebiliriz diye sorabilirsiniz bunu da if-else ile kontrol edeceğiz.

if($add){
    echo 'Ekleme başarılı';
}else{
    echo 'Ekleme başarısız';
}

bu işlemler sonunda ekrana çıkan yazıya göre işleminizin başarılı olup olmadığını anlayabilirsiniz.

PDO Update(Güncelleme) İşlemi

PDO ile veri güncellemek hemen hemen veri ekleme(insert) ile aynı şekilde olduğunu söyleyebiliriz. Hemen ne demek istediğimi kodla anlatmaya başlarsak.

$query = $db->prepare('UPDATE users SET user_pass = ? WHERE id = ?');
$update = $query->execute(['test1',1]);

burada id’si 1 olan kullanıcının şifresini test1 olarak değiştirdik. Bu işlemin gerçekleşip gerçekleşmediğini kontrol etmek için de hine yukarıda yaptığımız gibi bir if-else kontrolü yapmamız gerekiyor.

if($update){
    echo "Güncelleme başarılı";
}else{
    echo "Güncelleme başarısız";
}

PDO Delete (Silme) İşlemi

PDO’da silme işlemi aslında en kolay olanıdır execute edeceğimiz değer genellikle 1 tanedir. Hemen bu işlemi de koda dökerek anlatmaya başlamak gerekirse

$query = $db->prepare('DELETE FROM users WHERE id = ?');
$delete = $query->execute([1]);

şeklinde kodlarımızı yazıp çalıştırdığımız da users adlı tablodaki id değeri 1’e eşit olan kullanıcımızı tablodan silmiş oluyoruz.

Hine bu kodların çalışıp çalışmadığını anlamak için

if($delete){
    echo "Silme işlemi başarılı!";
}else{
    echo "Silme işlemi başarısız!";
}

şeklinde bir kontrol yapmanız gerekiyor.

Özet,

Bu yazımda PDO ile CRUD işlemlerinden Create(Veri Ekleme), Update(Veri Güncelleme), Delete(Veri Silme) işlemlerinden bahsettim. Bu işlemleri yaparken prepare edilip daha sonra execute edilerek nasıl kullanılacağını gösterdim.

Bir sonraki yazımda PDO CRUD da Read(Veri Okuma) kısmından bahsedeceğim. O zamana kadar PHP hakkında yazdığım yazıları merak ediyorsanız buraya tıklayınız Ayrıca burada yazılmış olan SQL sorguları size karmaşık geliyorsa MySQL hakkında yazmış olduğum yazılarıda incelemelisiniz.

PHP PDO ya Genel Bakış

Merhaba arkadaşlar bu yazımda PHP PDO ya genel bir giriş yapacağız. PDO PHP’de veritabanı işlemleri yapmamızı sağlayan bir kütüphanedir ve genel olarak bir çok SQL Injection açığı gibi açıklara karşı güvenli olacak şekilde hazırlanmıştır fakat tabi ki bu tarz açıklardan korunmak için kendi önlemlerinizide almalısınız tam olarak güvenliği sağlamak hine sizin elinizde.

Bu yazımı şu başlıklar altında inceleyeceğim.

  • PDO ile Veritabanı Bağlantısı
  • PDO ile Sorgular Nasıl Yazılır

Bildiğiniz üzere MySQL ile alakalı şu zamana kadar hazırlamış olduğum yazılarımı tamamladım ve genel olarak PDO ile nasıl bir sorguların yapılacağından bahsedecek olsam bile çok detaya inmeyeceğim.

PDO ile Veritabanı Bağlantısı

PDO ile Veritabanı bağlantısı yapmak basittir. Tek yapmanız gereken

$db = new PDO("mysql:host=localhost;dbname=veritabani_adi;charset=utf8", "kullanici-adi", "sifre");

alanında ki boş alanları doldurmak olacaktır. Ben kendi bilgisayarım da lokal sunucuma bağlanmak için kullandığım bir PDO bağlantısından örnek vermek gerekirse

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

şeklinde olacaktır. Bu kodları try – catch blokları içinde şu şekilde kullanıyorum.

try{    
    $db = new PDO("mysql:host=localhost;dbname=test123123;charset=utf8", "root", "root");
}
catch (PDOException $e){
    echo $e->getMessage();
}

şeklindedir. Mesela try-catch blokları arasında ki PDO Bağlantısında veritabanı adını yanlış girdim karşıma çıkacak hata şu şekildedir.

PDO ile Sorgular Nasıl Yazılır

PDO ile sorgu yazmak aslında basittir. Bunun iki farklı yöntemi olur biri direkt olarak query komutunu kullanmak ya da önce prepare edip daha sonra execute ederek sorgumuzu çalıştırmak bu iki yöntemden de detaylı bir şekilde bahsetmek gerekirse

1. Yöntem

Bu yöntem direkt query komutunu kullanarak sql sorgumuzu çalıştırmaktır ve bu yöntemin gerekli önlemler alınmazsa çok güvensiz bir yöntem olduğunu söylemeliyim. Peki nasıl bu yöntem ile sorgu çalıştırırız.

$db->query('SELECT * FROM tablo_adi WHERE id=1');

Bu sorgu da tablomuz daki id değeri 1 olan satırı ekrana yazdırmasını istedik buradaki “1” değerini kullanıcıdan aldığımızı varsayarsak çok güzel bir şekilde SQL INJECTION açığını kullanarak sistemimizde ki tablolara tam olarak erişim sağlamış oluruz.

2. Yöntem

Bu yöntem ise önce sorgumuzu hazırlayıp(prepare) daha sonra ise işleme(execute) ile çalışır. Yukarı da verdiğimiz örneği prepare-execute yöntemi ile şu şekilde yapabilirdik.

$sorgu = $db->prepare('SELECT * FROM tablo_adi WHERE id = ?');
$sorgu->execute([1]);

bu şekilde yaptığımız da bir kaç satır fazla kod yazıyoruz bazen neye karşılık neyin geleceğini konusunda uğraştırıcı oluyor fakat genel olarak sistemimiz SQL INJECTION açığından arınmış oluyor.

Özet,

Bu yazımda sizlerle birlikte PHP PDO konusuna giriş yapmış olduk. İleri ki bir kaç yazım PDO ile alakalı olacak olsa bile genel olarak MySQL yazılarımı inceleyerek PDO’yu kullanabilirsiniz.

Bir sonraki yazımda PDO ile CRUD İşlemlerinden bahsedeceğim. O zamana kadar PHP hakkında yazılarımı okumak için buraya, MySQL hakkında yazdıklarım için buraya tıklamalısınız. Ayrıca PDO kütüphanesini detaylı incelemek isterseniz buraya tıklayınız.