Thread Starter
#0
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:
Məsələn, bu pis üsuldur:
Ə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:
Burada $name sadəcə data kimi göndərilir, SQL-in bir hissəsi olmur.
$pdo = new PDO("mysql:host=localhost;dbname=test_
echo "PDO ilə istifadəçi əlavə olundu!";
Əsas ideya odur ki:
- Əvvəlcə SQL sorğusunun skeleton-u hazırlanır (? və ya :param placeholder-ları ilə).
- Sonra istifadəçi dəyərləri bu placeholder-lara ayrıca bind olunur.
- 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:
CODE
1234// ❌ 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:
CODE
12345// ✅ 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
CODE
123456789101112131415161718192021<?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 = "[email protected]";
$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_
CODE
12345678910db;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' => '[email protected]'
]);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 ✅
● WEBMASTER ●
Həyatın mənası bir nöqtə-vergüldə gizlidir.
« every fix is a win »
#DevMood
Həyatın mənası bir nöqtə-vergüldə gizlidir.
« every fix is a win »
#DevMood