0Pricing
PHP Academy · درس

العبارات المُعدّة وربط المعاملات

استخدموا prepare وbindParam وexecute لمنع حقن SQL

العبارات المُعدّة وربط المعاملات درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

لماذا نستخدم العبارات المُحضّرة؟

تفصل العبارات المُحضّرة بنية SQL عن البيانات. ويُعامَل إدخال المستخدم دائمًا كقيمة، لا كتعليمة SQL، مما يجعل حقن SQL مستحيلًا.

prepare() + execute()

التدفق الأساسي هو: استخدم prepare مع العناصر النائبة، ثم نفّذ باستخدام القيم.

<?php
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$_POST["email"]]);
$user = $stmt->fetch();

العناصر النائبة المسماة

استخدم العناصر النائبة المسماة (:name) لوضوح أكبر، خصوصًا عندما تظهر القيمة نفسها عدة مرات.

<?php
$stmt = $pdo->prepare(
    "INSERT INTO users (name, email) VALUES (:name, :email)"
);
$stmt->execute([':name' => "Alice", ':email' => "alice@example.com"]);

bindParam مقارنةً بـ bindValue

يربط bindParam متغيرًا بالمرجع، أي تُقرأ القيمة وقت التنفيذ. أما bindValue فيربط القيمة فورًا.

<?php
$name = "Bob";
$stmt = $pdo->prepare("INSERT INTO users (name) VALUES (:name)");
$stmt->bindParam(":name", $name);
$name = "Carol";
$stmt->execute(); // inserts "Carol"

مثال على bindValue

استخدم bindValue عندما تريد تثبيت القيمة وقت الربط.

<?php
$stmt = $pdo->prepare("SELECT * FROM products WHERE price < :max");
$stmt->bindValue(":max", 50.00, PDO::PARAM_INT);
$stmt->execute();

ثوابت الأنواع

تحدد المعلمة الثالثة الاختيارية نوع البيانات: PDO::PARAM_INT وPDO::PARAM_STR وPDO::PARAM_BOOL وPDO::PARAM_NULL.

إعادة تنفيذ العبارات

يمكن تنفيذ العبارة المُحضّرة عدة مرات، إذ يُجمّع الاستعلام مرة واحدة على الخادم.

<?php
$stmt = $pdo->prepare("INSERT INTO logs (msg) VALUES (:msg)");
foreach ($messages as $msg) {
    $stmt->execute([':msg' => $msg]);
}

rowCount()

بعد INSERT أو UPDATE أو DELETE، تُرجع rowCount() عدد الصفوف المتأثرة.

<?php
$stmt = $pdo->prepare("DELETE FROM users WHERE active = 0");
$stmt->execute();
echo $stmt->rowCount()." users deleted";

lastInsertId()

بعد INSERT، احصل على المفتاح الأساسي للزيادة التلقائية باستخدام $pdo->lastInsertId().

<?php
$stmt = $pdo->prepare("INSERT INTO articles (title) VALUES (:t)");
$stmt->execute([':t' => "My Post"]);
$newId = $pdo->lastInsertId();

لا تدمج إدخال المستخدم مطلقًا

لا تفعل الآتي مطلقًا: "SELECT * FROM users WHERE name = '".$name."'". استخدم العناصر النائبة دائمًا، حتى إذا كنت قد «نقّيت» الإدخال.

كائن PDOStatement

تُرجع prepare() كائن PDOStatement الذي يتضمن: execute() وfetch() وfetchAll() وbindParam() وbindValue() وrowCount().

الخلاصة

استخدم العبارات المُحضّرة دائمًا للاستعلامات التي تتضمن بيانات خارجية. وفضّل العناصر النائبة المسماة. استخدم bindValue للقيم الفورية وbindParam للربط داخل الحلقات.

تحقق سريع

متى يقرأ bindParam قيمته؟

الأسئلة الشائعة

هل درس «العبارات المُعدّة وربط المعاملات» مجاني؟

نعم — نص درس «العبارات المُعدّة وربط المعاملات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «العبارات المُعدّة وربط المعاملات»؟

استخدموا prepare وbindParam وexecute لمنع حقن SQL تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «العبارات المُعدّة وربط المعاملات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

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

جميع الدروس في هذه الدورة

  1. الاتصال بـ MySQL باستخدام PDO
  2. العبارات المُعدّة وربط المعاملات
  3. جلب النتائج باستخدام PDO
  4. المعاملات باستخدام PDO
← العودة إلى PHP Academy