PHP de veri tabanına bağlanma ve sorgu çalıştırmayı anlatmıştım.
Klasik veri tabanı bağlantısı mysql_connect() komutu ile yapılıyor, sorgu çalıştırma mysql_query() ile yapılıyor fakat pdo yapısı biraz farklı. PDO php 5.2 den sonra gelen bir veri tabanı sorgu sınıfı, yani nesne tabanlı bir yapı.
En güzel özelliği çoklu veri tabanı desteği olması. Oracle, SQL Server, MySQL gibi farklı veritabanlarına bağlanabilme özelliği sunuyor. Ayrıca kendi içerisinde sql injection koruması olan bir sınıftır.
$db = new PDO('mysql:host=localhost;dbname=veritabanı adı', 'kullanıcı adı', 'sifre');
PDO sınıfını db değişkenine bağlı olarak oluşturduk, sorgularımızı bu sınıfa bağlı methodlar ile yapacağız.
query() methodu genel olarak tüm sorgularda kullanılır.
exec() methodu bilgi girişi, güncelleme, silme gibi veri tabanına değer göndermede kullanılır.
prepare() methodu query() methodundaki gibi tüm sorguları çalıştırmada kullanılır fakat buna ek olarak bir de execute() methodu kullanılır, prepare ile yapılan sorgunun uygulanması için.
fetch() methodu; tek bir sonuç getirmek için kullanılır, query ile çalıştırılmışsa sorgu query den sonra, prepare ile çalıştırılmışsa sorgu execute methodundan sonra kullanılır.
Veritabanından dataların sayılarını getirmek istediğimizde fetch(PDO::FETCH_NUM) kullanılır.
Örnek olarak bir sorgu çalıştırayım, sorguyu query ile yapacağım.
$sorgu = $db->query('select * from blog where id=1')->fetch();
Veritabanından id değeri 1 olan konuyu getiren sorguyu yazdık. Bu şekilde de yapabilirdik
$sorgu = $db->query('select * from blog where id=1'); $sorgu->fetch();
İkisi de aynı işlemi yapıyor.
echo $sorgu['blog_baslik'];
İle konu başlığını yazdırmış oluruz.
Tüm konuların toplam sayılarını yazdırmak için
$konusayi = $db->query('select count(*) from blog')->fetch(PDO::FETCH_NUM); echo $konusayi[0];
$konusayi değişkeni dizi tipinde bir değişken olduğu için $konusayi[0] şeklinde yazdırdık.
prepare() ile yaparsak eğer sorgumuz aşağıdaki gibi olacaktır;
$sorgu = $db->prepare('select * from blog where id=1'); $sorgu->execute(); $sorgu->fetch(); echo $sorgu['blog_baslik'];
Dışarıdan alınacaksa id bilgisi bunu parametre ile vermek daha iyidir, çünkü parametreyi tanımlarken o parametrenin integer veya string olma özelliğini kontrol ettirebiliyoruz. Parametre için bindValue() methodunu kullanıyoruz.
$sorgu = $db->prepare('select * from blog where id=:id'); $sorgu->bindValue(':id', $id, PDO::PARAM_INT); $sorgu->execute(); $sorgu->fetch(); echo $sorgu['blog_baslik'];
Sorgumuzu yazarken :id kullandım, bu parametre, bunun değerini bindValue() methodu ile aktardım.
PDO::PARAM_INT ile gelecek değerin int tipinde olacağını belirttik.
Gelecek olan değerin string olması ile ilgili bir kontrol yaptıracaksak eğer PDO::PARAM_STR yazmalıyız INT yerine.
Şimdiye kadar veritabanından hep bilgi getirdik, aynı sorgularla insert, update, delete işlemleri de yapabiliriz.
Delete, update gibi işlemler için exec kullanabiliriz, ayrıca veri tabanı karakter seti belirleyeceksek yine exec kullanmalıyız.
$sorgu = $db->exec('delete from blog where id=1');
Blog id değeri 1 olan konuyu sildik. Fakat bu tarz işlemleri prepare ile yaparsak daha iyi olur.
Veya karakter seti ayarlayacaksak eğer
$db->exec("set names 'utf8'");
bu sorguyu kullanmalıyız.
English: https://niyazi.net/en/php-data-object-pdo
Muhammed Niyazi ALPAY - Cryptograph
Senior Software Developer & Senior Linux System Administrator
Meraklı
PHP MySQL MongoDB Python Linux Cyber Security
Hiç yorum yok