حل بديل لمشكلة PDO RowCount MySQL الخاصة بـ PHP5
سؤال
لقد بدأت مؤخرًا العمل في مشروع جديد باستخدام 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()
يدعم عدد الصفوف المحددة من الخلية كذلك.ولكن مرة أخرى - لا تحتاج إلى هذا الرقم في تطبيق ويب متوسط على أي حال.