PHP 8 ile MySQLi kullanarak prepared sorgular (hazırlanmış sorgular) kullanmak, SQL enjeksiyonuna karşı koruma sağlamak ve performansı artırmak için etkili bir yöntemdir. İşte adım adım nasıl yapabileceğinizi açıklayalım:
1. MySQLi Bağlantısı
Öncelikle veritabanınıza bağlanmalısınız. Aşağıda, MySQLi ile nasıl bağlantı kurabileceğinizi gösteren bir örnek verilmiştir:
$servername = "localhost";
$username = "kullanici_adiniz";
$password = "sifreniz";
$dbname = "veritabani_adiniz";
// Bağlantıyı oluştur
$conn = new mysqli($servername, $username, $password, $dbname);
// Bağlantıyı kontrol et
if ($conn->connect_error) {
die("Bağlantı başarısız: " . $conn->connect_error);
}
2. Prepared Sorgu Oluşturma
Prepared sorgular, SQL komutunu ve parametreleri ayrı olarak tanımlamanıza olanak tanır. Aşağıdaki örnekte, bir kullanıcıyı veritabanına eklemek için hazırlanan bir sorgu gösterilmektedir:
// Prepared sorgu oluştur
$stmt = $conn->prepare("INSERT INTO kullanicilar (isim, email) VALUES (?, ?)");
// Değerleri bağla
$stmt->bind_param("ss", $isim, $email);
// Değerleri ata
$isim = "Ahmet";
$email = "ahmet@example.com";
// Sorguyu çalıştır
$stmt->execute();
// Sorgunun başarılı bir şekilde çalışıp çalışmadığını kontrol et
if ($stmt->affected_rows > 0) {
echo "Yeni kayıt başarılı!";
} else {
echo "Kayıt başarısız!";
}
// Sorgu nesnesini kapat
$stmt->close();
3. Prepared Sorgu ile Veri Okuma
Veri okumak için de prepared sorgular kullanılabilir. Aşağıda, bir kullanıcının bilgilerini çekmek için bir örnek verilmiştir:
// Kullanıcıyı seç
$stmt = $conn->prepare("SELECT isim, email FROM kullanicilar WHERE id = ?");
// Değerleri bağla
$stmt->bind_param("i", $id);
// Değeri ata
$id = 1;
// Sorguyu çalıştır
$stmt->execute();
// Sonuçları al
$result = $stmt->get_result();
// Sonuçları kontrol et
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo "İsim: " . $row["isim"] . " - Email: " . $row["email"] . "<br>";
}
} else {
echo "Sonuç bulunamadı.";
}
// Sorgu nesnesini kapat
$stmt->close();
4. Bağlantıyı Kapatma
İşlemler tamamlandıktan sonra veritabanı bağlantısını kapatmayı unutmayın:
$conn->close();
Özet
Prepared sorgular, güvenliği artırmak ve performansı optimize etmek için harika bir yöntemdir. MySQLi ile hazırlanan sorgular, parametrelerin bağlanması ve sorguların çalıştırılması işlemlerini ayrı hale getirerek SQL enjeksiyonuna karşı etkili bir koruma sağlar.