التعامل مع استعلامات "WHERE... IN" مع PDO
عند استخدام PDO للوصول إلى قاعدة البيانات، إدارة الاستعلامات باستخدام "WHERE... IN" يمكن أن تشكل تحديًا. خذ بعين الاعتبار السيناريو التالي: تحتاج إلى إزالة الإدخالات من جدول قاعدة البيانات استنادًا إلى قائمة عناصر النموذج المحددة، والتي يتم تمثيلها كـ "$idlist" ذات طول ومحتوى متغيرين (على سبيل المثال، '260,201,221,216,217,169,210,212,213').
في البداية، قد يبدو استخدام استعلام مثل الاستعلام أدناه منطقيًا:
$query = "DELETE from `foo` WHERE `id` IN (:idlist)";
ومع ذلك، هذا الأسلوب يحذف المعرف الأول فقط. يتم تجاهل الفواصل والمعرفات اللاحقة عن طريق الخطأ.
للتغلب على هذه المشكلة، من الضروري فهم سلوك البيانات المعدة في PDO. يمكن ربط القيم بالعناصر النائبة باستخدام معلمات مرقمة أو مسماة. بالنسبة للاستعلام "WHERE... IN"، يجب أن يكون لكل معرف في القائمة عنصر نائب خاص به.
يتطلب الحل أسلوبًا ديناميكيًا:
$idlist = array('260', '201', '221', '216', '217', '169', '210', '212', '213');
$questionmarks = str_repeat("?,", count($idlist) - 1) . "?";
$stmt = $dbh->prepare("DELETE FROM `foo` WHERE `id` IN ($questionmarks)");
بعد ذلك، اربط كل معرف بعلامة استفهام مقابلة:
for ($i = 0; $i bindParam($i 1, $idlist[$i]);
}
تضمن هذه الطريقة أن كل عنصر في القائمة مرتبط بشكل صحيح بعنصر نائب، مما يسمح للاستعلام بحذف السجلات المقصودة بنجاح.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3