PDO Nedir? MySQLi yerine neden PDO kullanmalısınız?

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18
PDO (PHP Data Objects), PHP ile veritabanları arasında iletişim kurmayı sağlayan, hafif ve tutarlı bir arayüz sunan bir veritabanı erişim katmanıdır. PDO, kendisi bir veritabanı değildir; sadece veritabanına bağlanmanızı ve sorgu çalıştırmanızı sağlayan bir araçtır (driver).

Neden MySQLi Yerine PDO Kullanmalısınız?​


Birçok geliştirici başlangıçta MySQLi'ye alışkın olsa da, PDO'nun sunduğu avantajlar projelerinizin güvenliği ve geleceği için kritiktir.

1. Veritabanı Bağımsızlığı (Database Agnostic)​

MySQLi sadece MySQL veritabanları ile çalışabilir. PDO ise 12 farklı veritabanı sürücüsünü (PostgreSQL, SQLite, MSSQL, Oracle vb.) destekler. Projenizi ileride MySQL'den farklı bir sisteme taşımak isterseniz, PDO kullanıyorsanız sadece bağlantı cümlesini değiştirmeniz yeterlidir. Sorgularınız büyük oranda aynı kalır.

2. Güvenlik: SQL Injection Koruması​

PDO, "Prepared Statements" (Önceden Hazırlanmış İfadeler) yapısını standart olarak sunar. Bu özellik, kullanıcıdan gelen zararlı kodların sorguya sızmasını (SQL Injection) otomatik olarak engeller.

3. Nesne Yönelimli Yapı (OOP)​

PDO tamamen nesne yönelimlidir. Bu da daha temiz, okunabilir ve modüler kod yazmanıza olanak tanır.

Temel Farklar Tablosu​


ÖzellikMySQLiPDO
Veritabanı DesteğiSadece MySQL12 Farklı Veritabanı
API YapısıFonksiyonel ve Nesne YönelimliSadece Nesne Yönelimli
Prepared StatementsVar (Zor kullanımı)Var (Çok kolay kullanım)
Named ParametersDesteklenmiyorDestekleniyor

PDO ile Güvenli Veritabanı Bağlantısı​


Aşağıdaki kod bloğu, PDO kullanarak hata yakalama (Exception) mekanizmasıyla birlikte bir veritabanı bağlantısı kurmanın en doğru yoludur:

PHP:
<?php
$host = 'localhost';
$db   = 'forum_veritabani';
$user = 'root';
$pass = 'sifre';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$options = [
PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
$pdo = new PDO($dsn, $user, $pass, $options);
echo "Bağlantı başarılı!";
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
?>

PDO ile Veri Çekme (Prepared Statements)​


SQL Injection riskini sıfıra indiren güvenli sorgu örneği:

PHP:
// Dışarıdan gelen veri
$uye_id = $_GET['id'];

// Sorguyu hazırla
$stmt = $pdo->prepare("SELECT username, email FROM xf_user WHERE user_id = ?");
$stmt->execute([$uye_id]);
$kullanici = $stmt->fetch();

if ($kullanici) {
echo "Kullanıcı Adı: " . $kullanici['username'];
}

Sonuç​


Eğer küçük bir kişisel proje yapmıyorsanız ve yazdığınız kodun profesyonel standartlarda (PSR) olmasını istiyorsanız, seçiminiz kesinlikle PDO olmalıdır. Daha fazla güvenlik, daha esnek bir yapı ve modern PHP ekosistemiyle tam uyum için PDO öğrenmek, bir web geliştiricinin en temel sorumluluklarından biridir.
 
Geri
Üst