Faydalı Prepared Statement nədir?

Mobil İlqar Ramizoğlu

Rəhbər
Administrator
Qoşulub
1 Oktyabr 2022
Mesajlar
121
Prepared statement — SQL sorğularını daha təhlükəsiz və optimallaşdırılmış formada işlətmək üsuludur.
Əsas ideya odur ki:
  1. Əvvəlcə SQL sorğusunun skeleton-u hazırlanır (? və ya :param placeholder-ları ilə).
  2. Sonra istifadəçi dəyərləri bu placeholder-lara ayrıca bind olunur.
  3. Verilənlər bazası bu prosesi ayırdığından SQL injection riski minimuma enir.

🔒 Niyə təhlükəsizdir?​


Məsələn, bu pis üsuldur:

Kod:
// ❌ SQL injection-a açıq
$name = $_POST['name'];
$sql = "SELECT * FROM users WHERE name = '$name'";
$result = $conn->query($sql);

Əgər istifadəçi name sahəsinə '; DROP TABLE users; -- yazsa, bütün cədvəli silə bilər.

Amma prepared statement belə işləmir:

Kod:
// ✅ Təhlükəsiz
$stmt = $conn->prepare("SELECT * FROM users WHERE name = ?");
$stmt->bind_param("s", $name); // "s" = string
$stmt->execute();
$result = $stmt->get_result();

Burada $name sadəcə data kimi göndərilir, SQL-in bir hissəsi olmur.

🔧 Mysqli nümunəsi​

Kod:
<?php
// DB bağlantısı
$conn = new mysqli("localhost", "root", "", "test_db");

// 1. Prepared statement yarat
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");

// 2. Parametrləri bağla
// "s" = string, "i" = integer, "d" = double, "b" = blob
$stmt->bind_param("ss", $name, $email);

// 3. Dəyərləri verib execute et
$name = "İlqar";
$email = "ilqar@example.com";
$stmt->execute();

echo "Yeni istifadəçi əlavə olundu!";

// 4. Bağla
$stmt->close();
$conn->close();

🔧 PDO nümunəsi (daha çevik)​

<?php
$pdo = new PDO("mysql:host=localhost;dbname=test_
Kod:
db;charset=utf8mb4", "root", "");

// 1. Prepared query
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");

// 2. Parametrləri bind et və execute
$stmt->execute([
    ':name'  => 'Sunay',
    ':email' => 'sunay@example.com'
]);

echo "PDO ilə istifadəçi əlavə olundu!";

📌 Faydaları​

  • SQL Injection-dan qoruyur ✅
  • Kod təmiz görünür ✅
  • Eyni sorğu dəfələrlə icra olunanda daha sürətli olur ✅ (DB sorğunu bir dəfə kompilyasiya edir)
  • Parametrlərlə işləmək asanlaşır ✅
 
Geri
Yuxarı Aşağı