Junior
Hazırlanmış sorğular nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Bu, SQL sorğusunun şablonunun, məlumatlardan ayrı olaraq verilənlər bazası serverinə göndərildiyi zamanlarda təhlükəsizliyi və performansı artırmaq üçün istifadə olunan bir üsuldur.
Faydalı tərəflər:
- SQL injeksiyalarına qarşı qoruma: Məlumatlar, SQL kodunun bir hissəsi kimi deyil, literal kimi verilənlər bazası serveri tərəfindən işlənir.
- Performans: Məlumatlar bazası serveri, sorğunun icra planını yadda saxlayır, bu da eyni sorğunu müxtəlif parametrlərlə çoxsaylı dəfə icra edərkən vaxt qənaət edir.
- Rahatsızlıq: Kodun strukturlaşdırılmasına və səhvlərin tapılmasını asanlaşdırır.
Hazırlanmış sorğunun icra mərhələləri:
- Hazırlıq (Prepare): Sorğu şablonu, sintaksis yoxlaması və icra planının qurulması üçün verilənlər bazası serverinə göndərilir. Şablonda, məlumatların yerləşdiriləcəyi yerləri göstərmək üçün yer tutucular istifadə olunur.
- Bağlama (Bind): Dəyişən dəyərləri, yer tutuculara bağlanır. Server onları SQL kodu kimi şərh etmir.
- İcra (Execute): Bağlanmış dəyərlərlə sorğu icra olunur.
PDO ilə PHP-də hazırlanan sorğu nümunəsi:
// Verilənlər bazasına qoşulma (nümunə)
$dsn = 'mysql:host=localhost;dbname=veritabani';
$user = 'istifadeci';
$password = 'sifre';
try {
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die('Qoşulma xətası: ' . $e->getMessage());
}
// Yer tutucularla sorğu hazırlama
$stmt = $pdo->prepare("SELECT ad, email FROM istifadeciler WHERE id = :id");
// Dəyəri yer tutucuya bağlama
$userId = 1;
$stmt->bindParam(':id', $userId, PDO::PARAM_INT);
// Sorğunu icra et
$stmt->execute();
// Nəticələri əldə et
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($user) {
echo "İstifadəçi adı: " . htmlspecialchars($user['ad']) . "<br>";
echo "İstifadəçi emaili: " . htmlspecialchars($user['email']) . "<br>";
} else {
echo "ID-si $userId olan istifadəçi tapılmadı.";
}
Bu nümunədə, :id adlı adlandırılmış yer tutucu istifadə olunur. Həmçinin, mövqeyə əsaslanan yer tutucular (?) da istifadə edilə bilər.
// Mövqeyə əsaslanan yer tutucu ilə sorğu hazırlama
$stmt = $pdo->prepare("SELECT ad, email FROM istifadeciler WHERE id = ?");
// Dəyərlərlə sorğunu icra et
$userId = 2;
$stmt->execute([$userId]);
// Nəticələri əldə et
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($user) {
echo "İstifadəçi adı: " . htmlspecialchars($user['ad']) . "<br>";
echo "İstifadəçi emaili: " . htmlspecialchars($user['email']) . "<br>";
} else {
echo "ID-si $userId olan istifadəçi tapılmadı.";
}
?>