Junior
Hazırlanmış sorgular nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Bu, SQL sorgu şablonunun, verilerden ayrı olarak veritabanı sunucusuna gönderildiği zamanlarda güvenliği ve performansı artırmak için kullanılan bir yöntemdir.
Avantajlar:
- SQL enjeksiyonlarına karşı koruma: Veriler, SQL kodunun bir parçası olarak değil, literal olarak veritabanı sunucusu tarafından işlenir.
- Performans: Veritabanı sunucusu, sorgu planını önbelleğe alır, bu da aynı sorgunun farklı parametrelerle tekrar tekrar çalıştırılmasında zaman kazandırır.
- Kolaylık: Kodu yapılandırmaya ve hata ayıklamayı kolaylaştırmaya olanak tanır.
Hazırlanmış sorgunun yürütülme aşamaları:
- Hazırlık (Prepare): Sorgu şablonu, sözdizimi kontrolü ve yürütme planı oluşturmak üzere veritabanı sunucusuna gönderilir. Şablonda, verilerin yerleştirileceği yerleri göstermek için yer tutucular kullanılır.
- Bağlama (Bind): Değişken değerleri, yer tutuculara bağlanır. Sunucu, bunları SQL kodu olarak yorumlamaz.
- Yürütme (Execute): Bağlanan değerlerle sorgu çalıştırılır.
PDO kullanarak PHP'de hazırlanan sorgu örneği:
// Veritabanına bağlanma (örnek)
$dsn = 'mysql:host=localhost;dbname=veritabanim';
$user = 'kullanici';
$password = 'sifre';
try {
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die('Bağlantı hatası: ' . $e->getMessage());
}
// Yer tutucularla sorgu hazırlama
$stmt = $pdo->prepare("SELECT isim, email FROM kullanicilar WHERE id = :id");
// Değeri yer tutucuya bağlama
$userId = 1;
$stmt->bindParam(':id', $userId, PDO::PARAM_INT);
// Sorguyu çalıştırma
$stmt->execute();
// Sonuçları alma
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($user) {
echo "Kullanıcı adı: " . htmlspecialchars($user['isim']) . "<br>";
echo "Kullanıcı emaili: " . htmlspecialchars($user['email']) . "<br>";
} else {
echo "ID'si $userId olan kullanıcı bulunamadı.";
}
Bu örnekte, :id isimli yer tutucu kullanılmıştır. Ayrıca, pozisyonel yer tutucular (?) da kullanılabilir.
// Pozisyonel yer tutucu ile sorgu hazırlama
$stmt = $pdo->prepare("SELECT isim, email FROM kullanicilar WHERE id = ?");
// Yer tutucuya değerle birlikte sorguyu çalıştırma
$userId = 2;
$stmt->execute([$userId]);
// Sonuçları alma
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($user) {
echo "Kullanıcı adı: " . htmlspecialchars($user['isim']) . "<br>";
echo "Kullanıcı emaili: " . htmlspecialchars($user['email']) . "<br>";
} else {
echo "ID'si $userId olan kullanıcı bulunamadı.";
}
?>