PHP PDO Nedir? Güvenli Veritabanı Bağlantısı ve SQL Injection Önleme
PHP PDO (PHP Data Objects) Nedir?
PDO, PHP ile veritabanları arasında çalışan hafif, tutarlı ve yüksek güvenlikli bir veritabanı soyutlama katmanıdır. Eski mysql_* fonksiyonları PHP 7 ile tamamen kaldırılmıştır; günümüzde standart ve güvenli yöntem PDO'dur.
Güvenli PDO Bağlantı Şablonu
<?php
$host = 'localhost';
$db = 'kullanici_veritabani';
$user = 'kullanici_dbuser';
$pass = 'GucluSifre123!';
$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, // Gerçek prepared statements
];
try {
$pdo = new PDO($dsn, $user, $pass, $options);
} catch (PDOException $e) {
die("Veritabanı bağlantı hatası oluştu.");
}
?>SQL Injection Nedir ve Prepared Statements Nasıl Korur?
Kötü niyetli bir kullanıcı form alanına ' OR '1'='1 yazdığında hazırlıksız sorgularda tüm veritabanı sızdırılabilir veya silinebilir.
Hatalı (Güvensiz) Kullanım:
// TEHLİKELİ: SQL Injection'a tamamen açık!
$sql = "SELECT * FROM users WHERE email = '" . $_POST['email'] . "'";
$pdo->query($sql);Doğru (Güvenli - Prepared Statements) Kullanım:
// %100 GÜVENLİ: Parametre ve sorgu ayrıştırılır
$stmt = $pdo->prepare('SELECT id, name, password FROM users WHERE email = :email');
$stmt->execute(['email' => $_POST['email']]);
$user = $stmt->fetch();Prepared statements kullandığınızda veritabanı motoru parametreyi bir SQL komutu olarak değil, salt metin (string) olarak değerlendirir; SQL injection tamamen imkansız hale gelir.
Geri bildiriminiz için teşekkürler!