تعد البيانات المعدة مفيدة جدًا لمنع حقن MySQL.
تُستخدم العبارات المعدة لتنفيذ عدة عبارات SQL متطابقة بشكل أكثر كفاءة.
تعمل البيانات المعدة على النحو التالي:
المعالجة المسبقة: إنشاء قوالب بيان SQL وإرسالها إلى قاعدة البيانات. يتم تمييز القيم المحجوزة بالمعلمة "؟". على سبيل المثال:
أدخل في MyGuests (الاسم الأول، اسم العائلة، البريد الإلكتروني) القيم (؟،؟،؟)
تحليل قاعدة البيانات وتجميعها وتحسين الاستعلام على قوالب عبارات SQL وتخزين النتائج بدون إخراج.
التنفيذ: أخيرًا، يتم تمرير القيمة المرتبطة بالتطبيق إلى المعلمة ("علامة؟")، وتقوم قاعدة البيانات بتنفيذ البيان. يمكن للتطبيق تنفيذ البيان عدة مرات إذا كانت قيم المعلمات مختلفة.
بالمقارنة مع تنفيذ عبارات SQL مباشرة، تتمتع العبارات المعدة بميزتين رئيسيتين:
تقلل البيانات المعدة بشكل كبير من وقت التحليل، حيث يتم إجراء استعلام واحد فقط (على الرغم من تنفيذ العبارة عدة مرات).
تعمل المعلمات الملزمة على تقليل النطاق الترددي للخادم، ما عليك سوى إرسال معلمات الاستعلام بدلاً من البيان بأكمله.
تعد البيانات المعدة مفيدة جدًا لحقن SQL لأنه يتم استخدام بروتوكولات مختلفة بعد إرسال قيم المعلمات، مما يضمن صحة البيانات.
يستخدم المثال التالي عبارات معدة في MySQLi ويربط المعلمات المقابلة:
تحليل كل سطر من التعليمات البرمجية للمثال التالي:
"أدخل في قيم MyGuests (الاسم الأول واسم العائلة والبريد الإلكتروني) (؟، ?، ?)"في عبارة SQL، نستخدم علامة الاستفهام (؟)، وهنا يمكننا استبدال علامة الاستفهام بعدد صحيح وسلسلة ونقطة عائمة مزدوجة الدقة وقيمة منطقية.
بعد ذلك، دعونا نلقي نظرة على الدالة bind_param():
$stmt->bind_param("sss", $firstname, $lastname, $email);تربط هذه الوظيفة معلمات SQL وتخبر قاعدة البيانات بقيمة المعلمات. يعالج عمود المعلمة "sss" أنواع بيانات المعلمات المتبقية. يخبر الحرف s قاعدة البيانات أن المعلمة عبارة عن سلسلة.
هناك أربعة أنواع من المعلمات:
ط - عدد صحيح (نوع عدد صحيح)
د - مزدوج (نوع النقطة العائمة مزدوج الدقة)
ق - سلسلة
ب - BLOB (كائن ثنائي كبير: كائن ثنائي كبير)
تتطلب كل معلمة نوعًا محددًا.
من خلال إخبار قاعدة البيانات بنوع بيانات المعلمة، يمكنك تقليل مخاطر حقن SQL.
ملاحظة: إذا كنت تريد إدراج بيانات أخرى (إدخال المستخدم)، فإن التحقق من صحة البيانات مهم للغاية. |
في المثال التالي، نستخدم العبارات المعدة ومعلمات الربط في PDO: