عندما تمرر قيمة نصية إلى موضع معامل في استعلام محضر، تستخدم القيمة بوصفها بيانات. لا يعاد تفسير محتواها كجزء جديد من صيغة SQL، حتى لو احتوت على كلمة OR أو علامات اقتباس. هذه الخاصية هي جوهر الفصل بين الأمر والبيانات الذي نريده عند التعامل مع مدخلات المستخدم.
إذا كان الشرط يبحث عن اسم يساوي القيمة المربوطة، فإن عبارة تشبه شرطًا منطقيًا تعامل كاسم كامل مطلوب البحث عنه. إن لم يوجد هذا الاسم، تكون النتيجة فارغة. لا تتحول المقارنة إلى شرط صحيح لجميع الصفوف، لأن بنية الاستعلام حددت قبل تمرير القيمة إليه.
مثال
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(100)
);
INSERT INTO customers VALUES (1, 'Nour');
PREPARE s FROM
'SELECT id FROM customers WHERE name = ?';
SET @name = 'Nour OR 1=1';
EXECUTE s USING @name;
DEALLOCATE PREPARE s;
من المهم أن يبقى موضع المعامل خارج علامات الاقتباس داخل صيغة الاستعلام. كما يجب ربط القيمة فعلًا، بدل إدراجها باستخدام تجميع النصوص قبل استدعاء التحضير. اسم الأداة وحده لا يوفر الحماية إن استعملناها بالطريقة الخطأ.
باختصار: الكلمات التي تشبه SQL داخل قيمة مربوطة تبقى بيانات، ولا تصبح أوامر أو شروطًا إضافية.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.