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).
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.
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:
SQL Injection riskini sıfıra indiren güvenli sorgu örneği:
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.
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
| Özellik | MySQLi | PDO |
|---|---|---|
| Veritabanı Desteği | Sadece MySQL | 12 Farklı Veritabanı |
| API Yapısı | Fonksiyonel ve Nesne Yönelimli | Sadece Nesne Yönelimli |
| Prepared Statements | Var (Zor kullanımı) | Var (Çok kolay kullanım) |
| Named Parameters | Desteklenmiyor | Destekleniyor |
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.