PHP PDO Veritabanı Bağlantısı

PHP ile veritabanı işlemleri için kullanılan PDO yapısında veritabanı bağlantısı ve dikkat edilmesi gerekenler ile ilgili bilgiler yer almaktadır.

PDO veritabanı bağlantısı

PDO ile veritabanı işlemleri için öncelikle PHP PDO kurulumu ile gerekli eklenti ve veritabanı sistemine ait sürücünün kurulması gerekir.

Gerekli alt yapısın hazırlanmasından sonra veritabanına ait değerlerin (sunucu adresi veya adı, varsa kullanıcı adı ve şifresi) PDO sınıfına kurucu metot ile aktarılması ile bağlantı sağlanır.

PDO sınıfı kurucu metodundaki parametreler veritabanı sistemine göre değişmekle beraber aşağıdaki gibi bir yapıdadır.

<?php

$baglanti = new PDO("dsn", "username", "password", options);

?>

Parametre ve açıklamaları;

dsn (data source name): Veritabanı sistemi bilgilerini belirtir,

username: Veritabanı kullanıcı adını belirtir,

password: Veritabanı kullanıcı şifresini belirtir,

options: PDO ayarlarını dizi (array) olarak belirtir.

PDO ile veritabanı bağlantısında en önemli kısım uygun dsn parametrenin belirlenmesidir.

MySQL için;

<?php

$baglanti = new PDO("mysql:host=localhost;dbname=kisi", "root", "");

$baglanti1 = new PDO("mysql:host=localhost;port=3307;dbname=kisi", "root", "");

$baglanti2 = new PDO("mysql:unix_socket=/tmp/mysql.sock;dbname=kisi", "root", "");

?>

SQLite için;

<?php

// SQLite dosya veritabanı
$baglanti = new PDO("sqlite:vt_dosyasi.sq3");

// SQLite ram veritabanı
$baglanti = new PDO("sqlite::memory:");

?>

PostgreSQL için;

<?php

$baglanti = new PDO("pgsql:host=localhost;port=5432;dbname=kisi;user=root;");

?>

SQL Server için;

<?php

$baglanti = new PDO("sqlsrv:Server=localhost;Database=kisi", "UserName", "Password");

$baglanti1 = new PDO("sqlsrv:Server=localhost,1521;Database=kisi", "UserName", "Password");

$baglanti2 = new PDO("sqlsrv:Server=12345abcde.database.windows.net;Database=kisi", "UserName@12345abcde", "Password");

?>

Oracle için;

<?php

$baglanti = new PDO("oci:dbname=kisi");

$baglanti1 = new PDO("oci:dbname=//localhost:1521/kisi");

?>

kullanılır.

Kullanılan dsn parametresi veritabanı sistemine göre çeşitli ek parametreleri de alabilir.

PHP, çoğunlukla MySQL veritabanı sistemi ile kullanıldığından PHP PDO Dersleri MySQL veritabanı sistemine göre yapılacaktır.

PDO karakter seti belirleme

Türkçe karakter sorunu gibi bir sorunla karşılaşırsanız veritabanı sistemine göre dsn parametresine charset parametresinin ekleyebilir veya PDO sınıfına ait exec metodu ile karakter tanımlaması yapabilirsiniz.

<?php

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

$baglanti->exec("SET NAMES utf8");

?>

Tanımlama veritabanı sistemine göre değişiklik gösterebilir.

PDO ayarlarının yapılması

PDO ile veritabanı bağlantısı yaparken karakter seti, hata yakalama, verilerin gösterim biçimi gibi ayarların yapılması faydalı olacaktır.

PHP hata yakalamaya sahip bir programlama dilidir.

PDO ile bağlantı yaparken hatalı bir veritabanı girilmesi PHP tarafından hata yakalama yöntemi ile yakalanacaktır.

<?php

// Hata ekranda gözükür
$baglanti = new PDO("mysql:host=localhost;dbname=olmayandb", "root", "");

// SQL hatası ekranda gözükmez
$baglanti1 = new PDO("mysql:host=localhost;dbname=kisi", "root", "");
$baglanti1->exec("SELECT *");

?>

PDO içerisindeki hatalı SQL sorguları, PHP ve try-catch tarafından yakalanmaz.

<?php

// SQL hatası ekranda gözükmez
try {

    $baglanti = new PDO("mysql:host=localhost;dbname=kisi", "root", "");
    $baglanti->exec("SELECT *");

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

?>

PDO hatalarını PDO::ATTR_ERRMODE ayarı ile try-catch bloğuna yönlendirilmesi gerekir.

<?php

// SQL hatası ekranda gözükür
try {

    $baglanti = new PDO("mysql:host=localhost;dbname=kisi", "root", "", array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    $baglanti->exec("SELECT *");

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

?>

PDO ayarları ayrıca setAttribute ile de yapılabilir veya getAttribute ile mevcut ayarlar hakkında bilgi alınabilir.

<?php

// SQL hatası ekranda gözükür
try {

    $baglanti = new PDO("mysql:host=localhost;dbname=kisi", "root", "");
    var_dump($baglanti->getAttribute(PDO::ATTR_ERRMODE));  // ayar öncesi durum

    $baglanti->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    var_dump($baglanti->getAttribute(PDO::ATTR_ERRMODE));  // ayar sonrası durum

    $baglanti->exec("SELECT *");

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

?>

Diğer sık kullanılan PDO ayarları

veritabanı tablo, sütun harf kuralı için PDO::ATTR_CASE ayarı PDO::CASE_NATURAL değeri,

verilerin gösterim biçimi için PDO::ATTR_DEFAULT_FETCH_MODE ayarı PDO::FETCH_ASSOC değeri kullanılır.

Ayrıca veritabanı sistemine özel PDO::MYSQL_ATTR_INIT_COMMAND gibi ayarlarda mevcuttur.

PDO veritabanı bağlantısını kapatmak

PDO ile veritabanı işlemleri bitirildiğinde PHP tarafından veritabanı bağlantısı kapatılır.

Veritabanı bağlantısını istediğimiz zaman kapatmak için sadece PDO değişkeninin değerini null yapmak yeterli olacaktır.

<?php

try {

    $ayarlar = array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_CASE => PDO::CASE_NATURAL,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
    );

    $baglanti = new PDO("mysql:host=localhost;dbname=kisi", "root", "", $ayarlar);

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

$baglanti = null;

?>

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!