Work-çevresinde php5 PDO rowCount MySQL sorunu için

3 Cevap php

Geçenlerde PHP5 kullanarak yeni bir proje üzerinde çalışmaya başladı ve bunun için kendi PDO sınıfları kullanmak istiyorum ettik. Sorun MySQL PDO Sürücü rowCount () desteklemiyor o yüzden orada bir sorgu çalıştırmak ve sonra etkilenen satırların sayısını almak için bir yolu var, ya da satırlar bana kalırsa oldukça büyük bir sorun olduğu, geri döndü. Herkesten önce bu ele sahip ve etrafında çalışmak için ne yaptık diye merak ediyordum. Herhangi bir satır etkilenen veya iade olsaydı kontrol etmek için bir fetch () veya fetchAll () yapmak zorunda bana kesmek gibi, ben yerine sadece $ deyim-> numRows () veya benzer bir şey yaparım gibi görünüyor.

3 Cevap

Sen satır sayısını almak için hemen orijinal SELECT sorgudan sonra bir SELECT FOUND_ROWS() sorgusu verebilir.

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

Ayrıca bakınız: MySQL Docs on FOUND_ROWS()

MySQL saklanan prosedürleri kullanarak o sizin için, bu çözüm gerçekten mümkün değildir. Ne yapmak öneririm saklı yordam iki satır kümeleri oluşturun olması. Birincisi, kayıtların sayısı ihtiva eden, bir satır ve tek sütun içerir. İkincisi bu satır sayısını alma için kullanacağınız kayıt olacak.

Sınırsız satır sayısı LIMIT / OFFSET hükümler olmadan ikinci satır olarak aynı WHERE fıkra ile bir SELECT COUNT(*) olabilir.

Başka bir fikir geçici bir tablo oluşturmak için olabilir. Geçici tablo doldurmak için SELECT deyimini kullanın. Sonra saniye için ilk satır ve SELECT * FROM tmpTable için SELECT COUNT(*) FROM tmpTable kullanabilirsiniz.

Bu soru birkaç yanlış varsayımlar ve bir eski deyim dayanmaktadır.

Her şeyden önce, affected sayısı karıştıramazsın ve selected satırları. PDO '09 bile geri eski destekledi.

SELECT deyimi tarafından döndürülen satır sayısı bahsetmişken - sadece bu sayıyı gerekmez. Eğer varsa veri yeterli.

Ve evet, bugünlerde rowCount() yanı sıra mysql seçilen satırların sayısını destekler. Fakat yine de - yine ortalama bir web uygulamasının bu sayıyı gerekmez.