PDO ile veri ekleme işlemi yapılırken Prepared Statements (Hazırlanmış İfadeler) yapısı kullanılır. Bu yapı, SQL komutu ile veriyi birbirinden ayırarak kötü niyetli kodların veritabanınıza sızmasını engeller.
Aşağıdaki örnekte, bir makaleler tablosuna nasıl yeni veri ekleneceği gösterilmiştir:
PHP
<?php
// Veritabanı bağlantısını dahil edin
require_once 'baglan.php';
try {
// 1. SQL sorgusunu hazırlayın (Değerler yerine :etiket kullanın)
$sql = "INSERT INTO makaleler (baslik, icerik, yazar_id) VALUES (:baslik, :icerik, :yazar_id)";
$sorgu = $pdo->prepare($sql);
// 2. Formdan veya dışarıdan gelen veriler
$baslik = "PHP PDO Kullanımı";
$icerik = "PDO ile güvenli veritabanı işlemleri...";
$yazar_id = 1;
// 3. Sorguyu verilerle eşleştirip çalıştırın
$sonuc = $sorgu->execute([
'baslik' => $baslik,
'icerik' => $icerik,
'yazar_id' => $yazar_id
]);
// 4. İşlemin başarısını kontrol edin
if ($sonuc) {
// Son eklenen kaydın ID'sini alma
$son_id = $pdo->lastInsertId();
echo "Kayıt başarıyla eklendi. Yeni Kayıt ID: " . $son_id;
}
} catch (PDOException $e) {
die("Kayıt sırasında bir hata oluştu: " . $e->getMessage());
}
?>
prepare() ve execute()prepare() metodu sorguyu veritabanına bir şablon olarak gönderir. execute() ise bu şablondaki boşlukları (parametreleri) doldurur. Bu sayede veriler hiçbir zaman doğrudan SQL cümlesinin parçası olmaz.
lastInsertId()Özellikle otomatik artan (AUTO_INCREMENT) bir ID sütununuz varsa, kayıt eklendikten hemen sonra veritabanının atadığı o eşsiz ID'yi bu metotla öğrenebilirsiniz. Bu, işlemden sonra kullanıcıyı yeni eklenen sayfaya yönlendirmek için çok kullanışlıdır.
Daha katı bir kontrol istiyorsanız, verileri bindValue ile tür belirterek bağlayabilirsiniz:
PHP
$sorgu->bindValue(':yazar_id', $yazar_id, PDO::PARAM_INT);
$sorgu->bindValue(':baslik', $baslik, PDO::PARAM_STR);
Güvenlik: Manuel tırnak temizleme (mysql_real_escape_string vb.) işlemlerine gerek kalmadan SQL Injection'ı önler.
Düzen: Kodunuz daha okunabilir ve yönetilebilir hale gelir.
Hata Yakalama: Veritabanı seviyesindeki hataları (Örn: benzersiz alan çakışması) try-catch ile zarifçe yönetebilirsiniz.