Sobes.tech
Junior

Tayyorlangan so'rovlar nima?

sobes.tech AI

AIdan javob

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ı.";
}
?>