تمرير معلمات المصفوفة واستخدام جملة LIMIT مع PDO
عند العمل مع استعلامات قاعدة البيانات، قد يكون من المفيد تمرير مجموعة من المعلمات إلى بيان PDO أثناء استخدام شرط LIMIT. ومع ذلك، قد يكون هذا أمرًا صعبًا عند استخدام طريقة bindParam لتعيين معلمات فردية.
المعضلة
ينشأ التحدي لأن جملة LIMIT تتطلب ربط قيم رقمية محددة ، بينما تتوقع طريقة التنفيذ مجموعة من المعلمات المسماة. يمنع عدم التوافق هذا من استخدام كلا الطريقتين في وقت واحد.
التغلب على المشكلة
يكمن الحل في تعطيل الإعداد الافتراضي لـ PDO::ATTR_EMULATE_PREPARES. عند التمكين، تقوم PDO داخليًا بإنشاء قيم SQL وعلامات اقتباس ديناميكية، ومحاكاة البيانات المعدة بشكل أساسي. ومع ذلك، فإن هذا السلوك الافتراضي يتداخل مع تمرير المعلمات المسماة.
تعطيل الاستعدادات التي تمت محاكاتها من خلال تعيين PDO::ATTR_EMULATE_PREPARES على false باستخدام أسلوب setAttribute، يتم تعطيل السلوك الافتراضي . يسمح هذا لشركة تنمية نفط عمان باستخدام البيانات المعدة فعليًا، مما يتيح ربط المعلمات المسماة مع الاستمرار في استخدام جملة LIMIT.
مثال للاستخدام$pdo->setAttribute (PDO::ATTR_EMULATE_PREPARES، خطأ)؛ $sql = "SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%') LIMIT :limit1, :limit2"; $stmt = $pdo->تحضير($sql); $stmt->execute(array(':id' => $id, ':limit1' => $limit1, ':limit2' => $limit2)); // يعمل!
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$sql = "SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%') LIMIT :limit1, :limit2";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(':id' => $id, ':limit1' => $limit1, ':limit2' => $limit2)); // Works!
اعتبارات الأداء يتم استخدام الاستعدادات التي تمت محاكاتها افتراضيًا لـ MySQL لتحسين الأداء. قد يؤدي تعطيل عمليات التحضير التي تمت محاكاتها إلى تقليل الأداء بشكل طفيف، ولكنه يتيح مرونة أكبر في ربط المعلمات.
موارد إضافية
لمزيد من المعلومات حول هذا الموضوع، راجع الموارد التالية:
[PDO MySQL: استخدم PDO::ATTR_EMULATE_PREPARES أو أليس كذلك؟](https://stackoverflow.com/questions/3273325/pdo-mysql-use-pdo-attr-emulate-prepares-or-not)
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3