Sobes.tech
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:

  1. 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.
  2. Bağlama (Bind): Dəyişən dəyərləri, yer tutuculara bağlanır. Server onları SQL kodu kimi şərh etmir.
  3. İ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ı.";
}
?>