حل بديل لمشكلة PDO RowCount MySQL الخاصة بـ PHP5

StackOverflow https://stackoverflow.com/questions/460010

  •  19-08-2019
  •  | 
  •  

سؤال

لقد بدأت مؤخرًا العمل في مشروع جديد باستخدام PHP5 وأريد استخدام فئات PDO الخاصة بهم لذلك.تكمن المشكلة في أن برنامج تشغيل MySQL PDO لا يدعمrowCount() لذا لا توجد طريقة لتشغيل استعلام ثم الحصول على عدد الصفوف المتأثرة أو الصفوف التي تم إرجاعها، وهي مشكلة كبيرة جدًا بالنسبة لي.كنت أتساءل عما إذا كان أي شخص آخر قد تعامل مع هذا من قبل وما الذي فعلته للتغلب عليه.يبدو أن الاضطرار إلى إجراء fetch() أو fetchAll() للتحقق مما إذا كانت أي صفوف قد تأثرت أو تم إرجاعها بمثابة اختراق بالنسبة لي، أفضل أن أفعل $stmt->numRows() أو شيء مشابه.

هل كانت مفيدة؟

المحلول

ويمكنك إصدار استعلام SELECT FOUND_ROWS() الحق بعد الاستعلام SELECT الأصلي للحصول على عدد الصفوف.

$pdo->query("SELECT * FROM users");
$foundRows = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();

وانظر أيضا: مستندات الخلية على FOUND_ROWS ( )

نصائح أخرى

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

وعدد من الصفوف غير محدودة يمكن أن يكون SELECT COUNT(*) مع جملة WHERE نفسه بالضبط كما في الصفوف الثاني دون شروط LIMIT / OFFSET.

وهناك فكرة أخرى يمكن أن يكون لإنشاء جدول مؤقت. استخدام بيان SELECT لملء الجدول المؤقت. ثم يمكنك استخدام SELECT COUNT(*) FROM tmpTable للصفوف الأول والثاني SELECT * FROM tmpTable لديك.

يعتمد هذا السؤال على عدة افتراضات خاطئة وبيان واحد قديم.

بادئ ذي بدء، لا تخلط بين عدد متأثر و المحدد صفوف.وقد دعمت شركة تنمية نفط عُمان الشركة الأولى حتى في عام 2009.

عند الحديث عن عدد الصفوف التي يتم إرجاعها بواسطة عبارة SELECT - فأنت لا تحتاج إلى هذا الرقم.البيانات التي لديك كافية.

ونعم، في الوقت الحاضر rowCount() يدعم عدد الصفوف المحددة من الخلية كذلك.ولكن مرة أخرى - لا تحتاج إلى هذا الرقم في تطبيق ويب متوسط ​​على أي حال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top