
İçerikler
Daha öncesinde videolu ve yazılı olarak anlatmış olduğum PDO konusunu toparlayarak tek bir makale şeklinde sunmak istedim. Böylelikle PDO konusunda eksiğinizin olması durumunda tek bir makaleden tüm işlemlerinizi halledebilirsiniz. Bu makalede veritabanı bağlantısından tüm MySQL işlemlerine kadar PDO kullanımını detaylandırmaya çalışacağım. Akışa geçmeden önce PDO’nun ne olduğunu inceleyelim. Sonrasında tüm detaylara başlıklar halinde değinmiş olalım.
PDO Nedir?
PDO, PHP Data Objects (PHP Veri Objeleri)’in kısaltılarak yazılışıdır. Vertabanı erişimini hafif ve tutarlı bir şekilde gerçekleştiren bir arayüzdür. Açılımından da anlaşılacağı üzere Nesne Yönetlimli Programlama arayüzüne sahip veritabanları ile çalışmaktadır. Çeşitli veritabanları ile erişim sağlayan PHP’nin bir arayüzü de diyebiliriz. PHP’nin ilk veriyonlarına göre PDO, ekstra güvenlik sağlamaktadır.
PDO Veritabanı Bağlantısı
PHP işlemlerini gerçekleştirmek için veritabanı bağlantısına ihtiyaç vardır. PDO arayüzü kullanılacağı zaman da buna ilişkin bir veritabanı bağlantısı oluşturulmalıdır.
try{ $db = new PDO('mysql:host=localhost; dbname=DBADI; charset=utf8', 'KULLANICI', 'SİFRE'); }catch(PDOException $a){ echo 'Hata Mesajı: '.$a->getMessage(); }
Yukarıda yer alan kodlar ile PDO veritabanı bağlantısı sağlanacaktır. DBADI, KULLANICI ve SIFRE alanlarına ilgili bilgileri yazarak veritabanı bağlantısı kurabilirsiniz. Ayrıca veritabanı bağlantısı sağlarken karakter seti de belirtebilirsiniz. Bunun için örnekte yer aldığı gibi charset deyimini kullanmanız gerekmektedir. Örnekte yer alan değer dışında bir değeri bu alana yazabilirsiniz. Karakter seti tanımlamasını farklı bir şekilde de tanımlayabilirsiniz. Bunun için $db değişken tanımlamasının hemen altına aşağıdaki kodu eklemeniz yeterli olacaktır.
$db->query("SET CHARACTER SET urf8");
Yukarıdaki kodu yazdığınızda, $db değişkeninde karakter seti yapmadan ikinci bir kalemle tanımlama yapabilirsiniz. Veritabanı bağlantısı ile ilgili detaylı bilgiler için bu konuya uzunca değinmiş olduğum PHP ile PDO MySQL Bağlantısı Kurma dersine göz atabilirsiniz.
PDO Veritabanı Bağlantısını Sonlandırma
Veritabanı işlemleri sonrasında gereksiz yere bağlantının açık kalmaması için işlemlerin sonunda kapatma işlemi yapılmalıdır.
$db = null;
Yukarıda yer alan kullanımla birlikte oluşturulan veritabanı bağlantısı sonlandırılacaktır.
PDO SELECT Kullanımı (TEK)
PDO ile işlemler query yada prepare ile gerçekleştirilmektedir. Temel düzeyde işlemler query olarak yapılabilir. Daha güvenli ve anahtar yapısı ile gönderim yapmak içinde prepare kullanılmalıdır. Özellikle SQL Injection gibi açıklar vermemek için prepare kullanılmalıdır.
$makale = $_GET['makale']; $islem = $db->query("SELECT * FROM makaleler WHERE siraNo = '".$makale."'")->fetch(PDO::FETCH_ASSOC); if ( $islem ){ print_r($islem); }
Yukarıda yer alan örnekte, GET ile gönderilen makalenin siraNo değere ait verinin alınmasına bir örnektir. Bu işlemi prepare ile yapacak olsaydık kodlarımız aşağıdaki gibi olacaktı.
$makale = $_GET['makale']; $islem = $db->prepare("SELECT * FROM makaleler WHERE siraNo=:sira"); $veriler = $islem->execute(array( ":sira" => $makale )); $verilCek = $islem->fetch(PDO::FETCH_ASSOC); if ( $verilCek ){ print_r($verilCek); }
Yukarıdaki örnekte ise preparea kullanılarak aynı işlem gerçekleştirilmiştir. PDO ile SELECT kullanımında TEK’li veri çekmek için PHP ile PDO MySQL Veri Tabanından Veri Çekme dersine göz atabilirsiniz.
PDO SELECT Kullanımı (TOPLU)
Toplu veri çekme işlemlerinde döngü kullanmak gerekmektedir. Eskiden sıklıkla WHILE döngüsü kullanılırken PDO ile birlikte FOREACH kullanılmaktadır.
$durum = $_GET['durum']; $islem = $db->query("SELECT * FROM makaleler WHERE durum = '".$durum."'")->fetchAll(PDO::FETCH_ASSOC); foreach($islem as $al){ print_r($al); echo "<br>"; }
Yukarıda yer alan örnekte, TEK’li veri çekmeden farklı fetchAll kullanımıdır. Sorguda elde edilen verilerde FOREACH döngüsü ile ekrana yazdırılmaktadır.
$durum = $_GET['durum']; $islem = $db->prepare("SELECT * FROM makaleler WHERE durum=:durum"); $listele = $islem->execute(array( ":durum" => $durum )); $veriler = $islem->fetchAll(PDO:FETCH_ASSOC); foreach($veriler as $al){ print_r($al); echo "<br>"; }
Toplu bir şekilde veri çekme işlemini prepare ile yapmak gerektiğinde yukarıdaki gibi sorguyu hazırlamak yeterli olacaktır. Bu konuyla ilgili olarak detaylı bilgi almak için PHP ile PDO MySQL Veri Tabanından Veri Listeleme dersini inceleyebilirsiniz.
PDO INSERT Kullanımı (Kayıt Etme)
Listeleme işlemleri genel olarak koşullara pek dayalı olmadığı için query kullanmak kimi zaman mantıklı olmaktadır. Fakat söz konusu Kayıt Etme, Silme ve Güncelleme gibi işlemlerse bu durumda prepare zorunlu olarak kullanılmalıdır.
$mail = $_POST['mail']; $sifre = $_POST['sifre']; $kayit = $db->prepare("INSERT INTO uyeler (mail,sifre) VALUES (:mail,:sifre)"); $islem = $kayit->execute(array( ":mail" => $mail, ":sifre" => $sifre )); if($islem){ echo "Kayıt başarılı"; }
Yukarıda yer alan örnekle birlikte kayıt işlemini gerçekleştirebilirsiniz. Bu konuyla ilgili detaylı bilgiyi PHP ile PDO MySQL Veri Tabanına Kayıt Ekleme (insert) dersiniden elde edebilirsiniz.
PDO Eklenen Verinin ID Değerini Alma
Yukarıda gerçekleştirmiş olduğumuz kayıt işlemi sonrasında eklenen verinin sıra değerini almak için lastInsertId() kullanılmaktadır.
if($islem){ echo "Kayıt başarılı. <br>"; echo "Eklenen kaydın ID Değeri : ".$db->lastInsertId(); }
Yukarıdaki örnekle birlikte son yapılan kayda ait ID değeri alınacaktır.
PDO UPDATE Kullanımı (Kayıt Güncelleme)
Kayıt güncelleme işleminde de prepare kullanılmalıdır. Kayıt işleminden farklı UPDATE deyimi ve hangi verinin güncelleneceğini belirten WHERE kullanımıdır.
$mail = $_POST['mail']; $sira = $_POST['sira']; $duzenle = $db->prepare("UPDATE uyeler SET mail=:mail WHERE sira=:sira"); $islem = $duzenle->execute(array( ":mail" => $mail, ":sira" => $sira )); if($islem){ echo "Düzenleme İşlemi başarılı"; }
Yukarıda yer alan örnekle birlikte güncelleme işlemini gerçekleştirebilirsiniz. Bu konuyla ilgili detaylı bilgiyi PHP ile PDO MySQL Veri Güncelleme İşlemi | Update dersiniden elde edebilirsiniz.
PDO DELETE Kullanımı (Kayıt Silme)
Kayıt silme işlemleride prepare ile gerçekleştirilmektedir.
$sira = $_GET["sira"]; $query = $db->prepare("DELETE FROM makaleler WHERE siraNo = :sira"); $sil = $query ->execute(array( ':sira' => $sira ));
Yukarıdaki işlemle birlikte veritabanından silme işlemini gerçekleştirebilirsiniz. Bu konuyla ilgili detaylı bilgiyi PHP ile PDO MySQL Veri Silme İşlemi (delete) dersinden elde edebilirsiniz.
PDO LIKE Kullanımı (Arama İşlemi)
Arama işlemi temel olarak dört çeşittir. Bunlar; belirlenen veri ile başlayan, belirlenen veri ile biten, içinde belirlenen veri geçen yada belirlenen veri olan koşullarıdır. Arama kriterleri % (Yüzde) ifadesi ile belirtilmektedir. Bu konuyla ilgili detaylı makaleye PDO ile Site İçi Arama İşlemi(PDO Like) ulaşabilirsiniz.
// Kullanıcıdan gelen arama değeri $Gelen = $_GET["ara"]; // Arama sorgusu ve limit belirtme $Ara = $db->prepare("SELECT * FROM makale WHERE baslik LIKE ? LIMIT 10"); // "?" ifadesinin karşılığını belirtme | x ile biten ifadeyi temsil eder. $Ara->execute(array('%'.$Gelen)); // Veri çekmek için kullanılacak olan değişken $Liste = $Ara->fetchAll(PDO::FETCH_ASSOC); // Aranan kelimeye göre veri varsa if($Ara->rowCount() != "0"){ foreach($Liste as $Bas){ echo $Bas["baslik"]."<hr>"; } }else{ // Aranan kelimeye göre veri yoksa echo "Aranan kelimeye göre veri bulunamadı :( "; }
Yukarıdaki işlemle birlikte PDO ile arama işlemini gerçekleştirebilirsiniz.
PDO Kullanımıyla ilgili olarak detaylı bilgisi php.net sitesinden ulaşabilirsiniz. Güncellemelerden ve farklı örneklerden haberdar olmak içinse bu makaleyi takip edebilirsiniz.