كيفية ربط مصفوفة بشرط IN() في استعلام PDO؟
مرحباً بالجميع! أنا مبتدئ في PHP وPDO، وواجهت مشكلة. لدي مصفوفة من معرفات المستخدمين، مثلاً: [1, 5, 7, 12]. أحتاج إلى تحديد من جدول users أولئك الذين يكون معرفهم ضمن هذه المصفوفة. في SQL العادي كنت سأكتب:
SELECT * FROM users WHERE id IN (1, 5, 7, 12)
لكن كيف أفعل ذلك عبر PDO باستعلامات مُعدّة؟ جربت هكذا:
```php
$ids = [1, 5, 7, 12];
$stmt = $pdo->prepare('SELECT * FROM users WHERE id IN (:ids)');
$stmt->execute([':ids' => $ids]);
```
لكن هذا لا يعمل — PDO يشتكي من أنه يتوقع قيمة scalar وليس مصفوفة. جربت implode وتمريرها كسلسلة نصية — وهذا ليس خياراً لأنه يكسر الأمان.
كيف أربط المصفوفة بشكل صحيح بـ IN()؟ هل أحتاج إلى إنشاء placeholders ديناميكياً؟ أم هناك طريقة ذكية مع PDO؟ سأكون ممتناً لإجابة مفصلة مع أمثلة.
ملاحظة: إصدار PHP 8.1، أستخدم MySQL.
<<>>
المشكلة وجذرها
PDO لا يدعم ربط مصفوفة بـ placeholder واحد في شرط