PHP PDO Veri Çekme

PDO ile veritabanı tablosundan veri çekme ve çekilen verilerin düzenli bir şekilde yazdırılması ile ilgili bilgiler yer almaktadır.

PDO ile veri çekme işlemi PHP PDO Kullanımı yazısında açıkladığım query ve prepare metodu ile yapılabilir.

PDO ile veri çekme işlemi için öncelikle PHP PDO Veritabanı Bağlantısı ile bağlantı yapılıp uygun SQL komutunun yazılması yeterli olacaktır.

PDO ile veri seçme işlemi SELECT SQL komutu ile yapılır.

Sadece belirli sütunları seçmek için

SELECT sutun1, sutun2,sutunN FROM tablo_adi

kullanılır.

Tablodaki tüm sütunları seçmek için sütun yerine sadece yıldız (*) karakterinin eklenmesi yeterli olacaktır.

SELECT * FROM tablo_adi

Veri çekmek için öncelikle gerekli veritabanı bağlantısını PDO ile yapalım.

<?php

try {

    $baglanti = new PDO("mysql:host=localhost;dbname=kisi", "root", "");
    $baglanti->exec("SET NAMES utf8");
    $baglanti->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    echo "Veri çekme işlemi";

} catch (PDOException $e) {
    die($e->getMessage());
}

$baglanti = null;

?>

Dışarıdan değer almayan veri çekme işlemi için query metodunu kullanabiliriz.

<?php

try {

    $baglanti = new PDO("mysql:host=localhost;dbname=kisi", "root", "");
    $baglanti->exec("SET NAMES utf8");
    $baglanti->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sorgu = $baglanti->query("SELECT kisi_adi, kisi_soyadi, kisi_eposta FROM kisiler");

    $cikti = $sorgu->fetch(PDO::FETCH_ASSOC);

    echo "Adı: " . $cikti["kisi_adi"] . "<br /> Soyadı: " . $cikti["kisi_soyadi"] . "<br /> E-posta: " . $cikti["kisi_eposta"];

} catch (PDOException $e) {
    die($e->getMessage());
}

$baglanti = null;

?>

Verileri yazdırma yöntemine göre PDOStatement sınıfındaki fetch, fetchAll, fetchColumn, fetchObject metotları kullanılabilir.

Örneğin; Çekilen değerleri sınıf özelliği olarak yazdırmak için fetchObject metodu kullanılabilir.

$cikti = $sorgu->fetchObject();

echo "Adı: " . $cikti->kisi_adi . "<br /> Soyadı: " . $cikti->kisi_soyadi . "<br /> E-posta: " . $cikti->kisi_eposta;

Ayrıca PDOStatement sınıfındaki fetch metodu parametre olarak aldığı;

PDO::FETCH_ASSOC – sütun ismine göre dizi,

PDO::FETCH_BOTH(varsayılan) – sütun ismine ve sütun numarasına göre dizi,

PDO::FETCH_BOUND – bindColumn ile belirtilen değişkene değer atar,

PDO::FETCH_INTO – belirtilen sınıf ile sütunları eşleştirir,

PDO::FETCH_LAZY – FETCH_BOTH ve FETCH_OBJ birleşimidir,

PDO::FETCH_NUM – sütun numarasına göre dizi verir,

PDO::FETCH_OBJ – verileri sınıf özelliği olarak yazdırmak için kullanılır.

Veri çekme işlemine dışarıdan değer alarak koşullu veri çekme gibi bir işlem yapılacaksa prepare metodunun kullanılması faydalı olacaktır.

<?php

$sira = 1;

try {

    $baglanti = new PDO("mysql:host=localhost;dbname=kisi", "root", "");
    $baglanti->exec("SET NAMES utf8");
    $baglanti->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sorgu = $baglanti->prepare("SELECT * FROM kisiler WHERE kisi_sira = ?");
    $sorgu->bindParam(1, $sira, PDO::PARAM_INT);
    $sorgu->execute();

    $cikti = $sorgu->fetch(PDO::FETCH_ASSOC);

    echo "Adı: " . $cikti["kisi_adi"] . "<br /> Soyadı: " . $cikti["kisi_soyadi"] . "<br /> E-posta: " . $cikti["kisi_eposta"];

} catch (PDOException $e) {
    die($e->getMessage());
}

$baglanti = null;

?>

Dışarıdan alınan değerin güvenli olarak SQL komutuna eklenmesi için prepare ve bindParam metodu kullanılmıştır.

Güvenli bir SQL komutu oluşturulduktan sonra execute metodu ile SQL komutu çalıştırılmıştır.

Metot query metodunda olduğu gibi geri dönüş değeri olarak PDOStatement sınıfındaki fetch, fetchAll, fetchColumn, fetchObject metotlarını verir.

Sorgu sonucunda ortaya çıkan veri veya satır sayısını öğrenmek için PDOStatement sınıfındaki rowCount metodu kullanılabilir.

echo "<p>Toplam kayıt sayısı: " . $sorgu->num_rows . "</p>";

Diğer metot ve özellikleri kullanarak çekilen veri ile ilgili bilgi alabilirsiniz.

PHP PDO Derslerine buradan ulaşabilirsiniz…

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!