"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يفشل البيان المُعد لشركة PDO في عرض النتائج باستخدام استعلام LIKE؟

لماذا يفشل البيان المُعد لشركة PDO في عرض النتائج باستخدام استعلام LIKE؟

تم النشر بتاريخ 2024-11-03
تصفح:377

Why Does PDO Prepared Statement Fail to Return Results with LIKE Query?

بيان PDO المُعد في PHP: مشكلات مع MySQL LIKE Queries

تقدم فئة PDO الخاصة بـ PHP مع MySQL آلية لتنفيذ عبارات SQL مع استعلامات ذات معلمات ، وتحسين الأمن والأداء. ومع ذلك، قد يواجه المستخدمون صعوبات عند استخدام استعلامات LIKE.

المشكلة: بيان PDO المُجهز لا يُرجع النتائج باستخدام استعلام LIKE

عند محاولة تنفيذ استعلام مشابه لما يلي باستخدام PDO:

SELECT *
FROM hs
WHERE hs_text LIKE "%searchTerm%"

قد يجد المستخدمون أنه لم يتم إرجاع أي نتائج.

الحل: المعلمة الصحيحة

تكمن المشكلة في معلمات غير صحيحة لمصطلح البحث. في PHP، تستخدم البيانات المعدة العناصر النائبة المسماة، والتي تتطلب بناء جملة مختلفًا. المعلمة الصحيحة لاستعلام LIKE هي:

$prep = $dbh->prepare($sql);
$ret = $prep->execute(array(':searchTerm' => '%'.$searchTerm.'%'));

شرح:

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

أخطاء شائعة أخرى:

WHERE hs_text LIKE :searchTerm
$ret = $prep->execute(array(':searchTerm' => '"%'.$searchTerm.'%"'));  // Incorrect
  • هذا الأسلوب غير صحيح لأنه يضيف علامات اقتباس مزدوجة غير ضرورية.
WHERE hs_text LIKE CONCAT(\'%\', ?, \'%\')
$ret = $prep->execute(array($searchTerm));  // Incorrect
    استخدام CONCAT لتغليف مصطلح البحث داخل الاستعلام ليس ضروريًا لتحديد المعلمات.
باستخدام المعلمات الصحيحة، يمكنك تنفيذ استعلامات LIKE بنجاح باستخدام أعدت شركة تنمية نفط عمان البيانات بلغة PHP.

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3