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

SQL PREPARE EXECUTE and DEALLOCATE تنفيذ الاستعلام المحضر PREPARE

تعلّم الحماية من ثغرات حقن قواعد البيانات SQL Injection واستخدام الاستعلامات المحضرة (PREPARE و EXECUTE) في MySQL 8 مع أمثلة وتطبيقات تفاعلية.
1 صفوف تعليمية
MySQL
7 مشاهدة

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

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

إلى جانب دوال التحضير في لغات البرمجة، يوفر خادم MySQL 8 أوامر SQL مباشرة للتحضير والتنفيذ وإخلاء الذاكرة، وتُستخدم بكثرة في الجلسات التفاعلية وداخل الإجراءات المخزنة الديناميكية:

  • PREPARE stmt_name FROM 'SELECT ... WHERE category = ? AND unit_price <= ?';: يترجم نص الاستعلام ويحفظه في ذاكرة الجلسة باسم stmt_name.
  • SET @cat = 'Storage', @max_p = 200.00;: يجهز القيم المراد تمريرها داخل متغيرات الجلسة المسبوقة بعلامة @.
  • EXECUTE stmt_name USING @cat, @max_p;: ينفذ الاستعلام المحضر ويربط المتغيرات بالترتيب مكان علامات الاستفهام (?).
  • DEALLOCATE PREPARE stmt_name; (أو المرادف DROP PREPARE stmt_name;): يحرر الذاكرة المحجوزة للاستعلام المحضر في الخادم فور انتهاء الحاجة إليه، مما يمنع استنزاف الحد الأقصى max_prepared_stmt_count.
+----+-------------------+-----------+------------+
| id | product_name      | category  | unit_price |
+----+-------------------+-----------+------------+
| 15 | NVMe SSD 2TB      | Storage   |     149.00 |
+----+-------------------+-----------+------------+
SQL
PREPARE filter_products FROM
  'SELECT id, product_name, category, unit_price
   FROM products
   WHERE category = ? AND unit_price <= ?
   ORDER BY unit_price ASC';

SET @cat_name  = 'Storage';
SET @max_price = 200.00;

EXECUTE filter_products USING @cat_name, @max_price;

DEALLOCATE PREPARE filter_products;