PDO'su rowCount () PHP 5.2.6 + Çalışma değil

3 Cevap php

Bu yüzden ben keşfetmek this (PHP 5.2.6 yüklü olan) bir müşterinin sunucuda bir süre için hata ayıklama sonra bugün ne yazık ki, bir süre için şimdi benim veritabanı Goto sınıf olarak PHP'nin PDO kullanarak oldum. Biz yeni kararlı sürümü (5.2.9) yükseltmeyi denedim ama sorun devam.

Herkes bir çözüm buldu?

3 Cevap

Sen the FOUND_ROWS() fonksiyonu , hiçbir iyi alternatifler varsa emin kullanarak MySQL kendisi aracılığıyla bunu yapabilirdi.

Dahili olarak tüm sonuç satırlarını getirilen ve size bu bilgileri vermek mümkün, onları tamponlu çünkü bu MySQL ile mümkün olduğunu tek nedeni sanki Edit: görünüyor. mysql_unbuffered_query() . If you use that function instead of mysql_query(), mysql_num_rows() işlevi çalışmaz göreceksiniz. Eğer gerçekten PDO kullanırken satır sayısını bilmek gerekiyorsa, bir diziye PDO'nun gelen tüm satırları getirebilir ve daha sonra kullanmak count().

Veritabanları siz satır sayısı için bir sayı verebilir tek yolu sorguyu çalıştıran ve satır sayısını sayma gereğidir.

Mysql uzantısı kontrol PHP gönderilmeden önce tüm veri kümesi belleğe getirilecek neden olur ve bu satırları işlemek başlayabilirsiniz varsayılan bir tamponlu sorgu modunu kullanır.

PDO sayfa yükleme süresi düşük gecikme yol açar ve ne istediğinizi genellikle varsayılan bir tamponsuz modunu kullanır. Ticaret kapalı tüm veri kümesi getirilen olmuştur kadar rowCount () geçerli bilgi dönmeyecektir olmasıdır.

Peki bu sayımı alabilirim?

Kolay:

$q = $db->query("SELECT ...");
$rows = $q->fetchAll();
$rowCount = count($rows);
echo "There are $rowCount rows\n";
foreach ($rows as $row) {
    print_r($row);
}

O kadar ön tüm satırları sorgular ve sayfa yükleme yavaş yapar çünkü Ama bu berbat, eski mysql uzantısı bu sorun yoktu!?

Ama bu eski mysql uzantısı aslında kapakların altında yaptığını tam olarak buydu; bu sayısını almak için tek yol bu.

Eğer () gelen PDOStatement nesnesi tarafından çalıştırılan son DELETE, INSERT veya UPDATE deyiminden etkilenen satır sayısını döndürür PDOStatement-> RowCount beri SEC sorguları için rowCount () kullanmanız gerekir dikkat edin.

Bunun yerine bir diziye fetchAll () kullanın ve sonra sayabilir ().