انتقل إلى محتوى الدرس

How Prepared Statements Stop SQLi كيف تفصل الاستعلامات المحضرة الكود

تعلّم الاستعلامات المحضرة وإدراج البيانات بأمان ضد SQL Injection في PHP بأسلوب PHP 8 الحديث مع أمثلة عملية وتطبيقات تفاعلية.
1 صفوف تعليمية
PHP
5 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

تقضي الاستعلامات المحضرة (Prepared Statements) على ثغرة حقن SQL بنسبة 100% لأنها تنفذ الاستعلام عبر مرحلتين منفصلتين تماماً في بروتوكول قاعدة البيانات:

  • المرحلة الأولى — $pdo->prepare($sql): يرسل PHP قالب الاستعلام وبداخله رموز نائبة (Placeholders مثل :email أو ?) إلى خادم قاعدة البيانات ليقوم بتحليل هيكل الأمر وتثبيته أولاً.
  • المرحلة الثانية — $stmt->execute($params): تُرسل القيم الفعلية في حزمة منفصلة؛ وبما أن شجرة الأمر قد تُرجمت مسبقاً، يستحيل أن تتحول البيانات المرسلة إلى أوامر تنفيذية.
PHP
<?php
$pdo = new PDO("sqlite::memory:");
$pdo->exec("CREATE TABLE subscribers (email TEXT)");

// Step 1: Prepare template (returns PDOStatement)
$stmt = $pdo->prepare("INSERT INTO subscribers (email) VALUES (:email)");

// Step 2: Execute with bound data
$stmt->execute(["email" => "[email protected]"]);
echo "Subscriber saved safely.";