دروس PHP

PHP الرئيسية مقدمة PHP تثبيت PHP بناء جملة PHP تعليقات PHP متغيرات PHP PHP صدى / طباعة أنواع بيانات PHP سلاسل PHP أرقام PHP PHP الرياضيات ثوابت PHP مشغلي PHP PHP إذا ... آخر ... Elseif مفتاح PHP حلقات PHP وظائف PHP مصفوفات PHP PHP Superglobals PHP RegEx

نماذج PHP

معالجة نموذج PHP التحقق من صحة نموذج PHP نموذج PHP مطلوب نموذج PHP URL / البريد الإلكتروني اكتمل نموذج PHP

PHP متقدم

تاريخ ووقت PHP تضمين PHP معالجة ملفات PHP فتح / قراءة ملف PHP إنشاء / كتابة ملف PHP تحميل ملف PHP ملفات تعريف الارتباط PHP جلسات PHP مرشحات PHP مرشحات PHP متقدم وظائف رد الاتصال PHP PHP JSON استثناءات PHP

PHP OOP

PHP ما هو OOP فئات / كائنات PHP منشئ PHP مدمر PHP معدِّلات الوصول إلى PHP الوراثة PHP ثوابت PHP فئات مجردة PHP واجهات PHP سمات PHP طرق PHP الثابتة خصائص PHP الثابتة مساحات أسماء PHP PHP تكرارات

قاعدة بيانات MySQL

قاعدة بيانات MySQL اتصال MySQL إنشاء قاعدة بيانات MySQL إنشاء جدول MySQL MySQL إدراج البيانات MySQL الحصول على آخر معرف إدراج عدة MySQL تم تجهيز MySQL MySQL حدد البيانات MySQL أين ترتيب MySQL حسب MySQL حذف البيانات تحديث بيانات MySQL بيانات MySQL المحدودة

لغة PHP XML

موزعي PHP XML محلل PHP SimpleXML PHP SimpleXML - احصل على PHP XML Expat PHP XML DOM

PHP - أجاكس

مقدمة أجاكس أجاكس بي إتش بي قاعدة بيانات أجاكس AJAX XML بحث أجاكس لايف استطلاع أجاكس

أمثلة PHP

أمثلة PHP مترجم PHP اختبار PHP تمارين PHP شهادة PHP

مرجع PHP

نظرة عامة على PHP صفيف PHP تقويم PHP تاريخ PHP دليل PHP خطأ PHP استثناء PHP نظام ملفات PHP مرشح PHP PHP FTP PHP JSON كلمات PHP PHP Libxml PHP Mail PHP الرياضيات متفرقات PHP PHP MySQLi شبكة PHP التحكم في إخراج PHP PHP RegEx PHP SimpleXML PHP ستريم سلسلة PHP معالجة متغيرة PHP محلل PHP XML PHP Zip المناطق الزمنية PHP

البيانات المعدة لـ PHP MySQL


العبارات المعدة مفيدة جدًا ضد حقن SQL.


البيانات المعدة والمعلمات المقيدة

البيان المُعد هو ميزة تُستخدم لتنفيذ نفس عبارات SQL (أو ما شابهها) بشكل متكرر وبكفاءة عالية.

تعمل البيانات المعدة بشكل أساسي على النحو التالي:

  1. التحضير: يتم إنشاء قالب بيان SQL وإرساله إلى قاعدة البيانات. يتم ترك قيم معينة غير محددة ، تسمى المعلمات (تسمى "؟"). مثال: أدخل في MyGuests VALUES (؟،؟،؟)
  2. تقوم قاعدة البيانات بتوزيع وترجمة وتنفيذ تحسين الاستعلام على قالب جملة SQL وتخزين النتيجة دون تنفيذها
  3. التنفيذ: في وقت لاحق ، يربط التطبيق القيم بالمعلمات ، وتقوم قاعدة البيانات بتنفيذ العبارة. يمكن للتطبيق تنفيذ البيان عدة مرات كما يريد بقيم مختلفة

بالمقارنة مع تنفيذ جمل SQL مباشرة ، فإن العبارات المعدة لها ثلاث مزايا رئيسية:

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

البيانات المعدة في MySQLi

يستخدم المثال التالي البيانات المعدة والمعلمات المرتبطة في MySQLi:

مثال (MySQLi مع بيانات معدة)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

// prepare and bind
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);

// set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "[email protected]";
$stmt->execute();

$firstname = "Mary";
$lastname = "Moe";
$email = "[email protected]";
$stmt->execute();

$firstname = "Julie";
$lastname = "Dooley";
$email = "[email protected]";
$stmt->execute();

echo "New records created successfully";

$stmt->close();
$conn->close();
?>

خطوط الكود المراد شرحها من المثال أعلاه:

"INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)"

في SQL الخاص بنا ، نقوم بإدخال علامة استفهام (؟) حيث نريد استبدالها بعدد صحيح أو سلسلة أو قيمة مزدوجة أو قيمة blob.

ثم ألق نظرة على وظيفة bind_param ():

$stmt->bind_param("sss", $firstname, $lastname, $email);

تربط هذه الوظيفة المعلمات باستعلام SQL وتخبر قاعدة البيانات ما هي المعلمات. تسرد الوسيطة "sss" أنواع البيانات التي تكون المعلمات. يخبر الحرف s mysql أن المعلمة عبارة عن سلسلة.

قد تكون الحجة أحد أربعة أنواع:

  • أنا - عدد صحيح
  • د - ضعف
  • ق - سلسلة
  • ب - BLOB

يجب أن يكون لدينا واحد من هؤلاء لكل معلمة.

من خلال إخبار mysql بنوع البيانات المتوقع ، فإننا نقلل من مخاطر حقن SQL.

ملاحظة: إذا أردنا إدراج أي بيانات من مصادر خارجية (مثل مدخلات المستخدم) ، فمن المهم جدًا أن يتم تعقيم البيانات والتحقق من صحتها.



البيانات المعدة في PDO

يستخدم المثال التالي البيانات المعدة والمعلمات المرتبطة في PDO:

مثال (PDO مع البيانات المعدة)

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  // prepare sql and bind parameters
  $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email)
  VALUES (:firstname, :lastname, :email)");
  $stmt->bindParam(':firstname', $firstname);
  $stmt->bindParam(':lastname', $lastname);
  $stmt->bindParam(':email', $email);

  // insert a row
  $firstname = "John";
  $lastname = "Doe";
  $email = "[email protected]";
  $stmt->execute();

  // insert another row
  $firstname = "Mary";
  $lastname = "Moe";
  $email = "[email protected]";
  $stmt->execute();

  // insert another row
  $firstname = "Julie";
  $lastname = "Dooley";
  $email = "[email protected]";
  $stmt->execute();

  echo "New records created successfully";
} catch(PDOException $e) {
  echo "Error: " . $e->getMessage();
}
$conn = null;
?>