هل يمكن استخدام معامل Prepared Statement لاختيار اسم عمود؟

متوسطقراءة دقيقةآخر تحديث 3 أكتوبر 2026

SQL قواعد البيانات

الإجابة

تمثل مواضع المعاملات في الاستعلامات المحضرة قيمًا، ولا تستخدم مباشرة بدل أسماء الجداول أو الأعمدة أو الكلمات المحجوزة. إذا أراد المستخدم اختيار عمود الفرز، فلا يكفي ربط النص الذي يحتوي اسم العمود بمعامل والتوقع أن يتحول إلى معرف داخل الاستعلام. يختلف اختيار البنية عن إدخال قيمة بيانات.

الطريقة المناسبة هي تحديد قائمة خيارات مسموحة في التطبيق، ثم تحويل اختيار المستخدم إلى اسم عمود معروف يملكه المطور. يمكن بناء جزء الفرز من هذا الاختيار المحدود، مع الاستمرار في ربط قيم البحث بمعاملات مستقلة. لا ينبغي نسخ اسم عمود خام من مدخل المستخدم إلى SQL دون تحقق.

مثال

CREATE TABLE books (
  id INT PRIMARY KEY,
  title VARCHAR(100),
  price INT
);
PREPARE s FROM
  'SELECT id, title FROM books WHERE price >= ? ORDER BY title';
SET @minimum = 10;
EXECUTE s USING @minimum;
DEALLOCATE PREPARE s;

في المثال، اسم عمود الفرز جزء ثابت من الاستعلام، بينما الحد الأدنى للسعر قيمة قابلة للربط. عند دعم أكثر من خيار فرز، نستخدم صيغًا موثوقة مماثلة لكل خيار بدل التعامل مع أسماء الأعمدة كأنها قيم عادية.

باختصار: اربط القيم بمعاملات، واختر أسماء الأعمدة من قائمة مسموحة يحددها التطبيق.

هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.

اختبر فهمك

يسمح التطبيق بالفرز حسب title أو price فقط. ما الطريقة الصحيحة لاختيار عمود الفرز مع الحفاظ على الحماية من حقن SQL؟