Niedawno rozpocząłem pracę nad nowym projektem przy użyciu PHP5 i chcę używać dla niego ich klas PDO. Problem polega na tym, że sterownik MySQL PDO nie obsługuje funkcji rowCount(), więc nie ma sposobu na uruchomienie zapytania, a następnie uzyskanie liczby dotkniętych wierszy lub zwróconych wierszy, co jest dość dużym problemem jeśli chodzi o mnie. Zastanawiałem się, czy ktokolwiek jeszcze sobie z tym poradził i co zrobiłeś, aby obejść to. Konieczność zrobienia metody fetch() lub fetchAll() w celu sprawdzenia, czy jakiekolwiek wiersze zostały zmienione lub zwrócone, wydaje się być dla mnie hackerem, wolę po prostu zrobić $ stmt-> numRows() lub coś podobnego.Obejście problemu dla PHP5 w wierszu CHO RowCount Wydanie MySQL
Odpowiedz
Możesz wysłać zapytanie SELECT FOUND_ROWS()
zaraz po oryginalnym zapytaniu SELECT
, aby uzyskać liczbę wierszy.
$pdo->query("SELECT * FROM users");
$foundRows = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();
Zobacz także: MySQL Docs on FOUND_ROWS()
Jedno pytanie, rowCount(), działa dobrze dla mnie, także dla instrukcji SELECT. Czy zostało to już wdrożone, ponieważ odpowiedziano na to pytanie? – Mattis
@Imran rowCount() działa także dla mnie, zarówno dla wybranych, jak i dla zapytań takich jak 'POKAŻ TABLICE LIKE ',
Funkcja rowCount() działa dobrze tylko, jeśli wcześniej wykonano metodę fetchAll(), ale nie, jeśli używasz fetch() (to jest lepszy powód zużywa znacznie mniej pamięci) – itsjavi
Dla tych z Was, którzy są przy użyciu procedur przechowywanych MySQL, to rozwiązanie nie jest to wykonalne. Sugerowałbym, żeby twoja procedura składowana tworzyła dwa zestawy wierszy. Pierwsza zawiera jeden wiersz i jedną kolumnę zawierającą liczbę rekordów. Drugi będzie zestaw rekordów, których użyjesz do pobrania tej liczby wierszy.
liczba wielu rzędach mogą być SELECT COUNT(*)
z takimi samymi WHERE
klauzuli jako drugi zestaw wierszy bez klauzul LIMIT
/OFFSET
.
Inną możliwością może być utworzenie tymczasowego stołu. Użyj oświadczenia SELECT
, aby wypełnić tabelę tymczasową. Następnie możesz użyć SELECT COUNT(*) FROM tmpTable
dla swojego pierwszego zestawu wierszy i SELECT * FROM tmpTable
na sekundę.
Nie sądzisz, że używanie tymczasowego stołu to trochę przesada, by zdobyć taki niepotrzebny numer? –
To pytanie jest oparte na kilku fałszywych założeniach i jednym przestarzałym oświadczeniu.
Po pierwsze, nie mylić liczby wybranych i wybranych wierszy. PDO wsparło tę pierwszą już w 2009 roku.
Mówiąc o liczbie wierszy zwróconych przez instrukcję SELECT - po prostu nie potrzebujesz tego numeru. Twoje dane są wystarczające.
I tak, w dzisiejszych czasach rowCount()
obsługuje liczbę wierszy wybranych również z mysql. Ale znowu - nie potrzebujesz tego numeru w średniej aplikacji internetowej.
"Po prostu nie potrzebujesz tego numeru, dane, które masz, wystarczą". Och, mój .. tłumaczy się na "Nie potrzebujesz adresu e-mail, wystarczy mieć stronę!" Prawie ZAWSZE potrzebuję tego numeru i odejmuję wiele zapytań COUNT, gdy mogę po prostu zliczyć zapytanie. Zawsze dobrze jest powiedzieć użytkownikowi, że "nie znaleziono wpisów", jeśli tak jest, zamiast po prostu zapętlać NIC. (Nie można również sprawdzić, czy funkcja fetch() zwraca wartość true, gdy używa się również pętli while) – mowgli
- 1. Obejście problemu dla setBackgroundDrawable na Androida?
- 2. Obejście problemu wycieku pamięci setInterval
- 3. Obejście problemu błędu przejrzystości ImageList?
- 4. Obejście problemu w przypadku błędu Mono PrivateFontCollection.AddFontFile
- 5. Zastąpienie lub obejście problemu dla asprintf w systemie AIX
- 6. muszę obejście Excel Guessing typy danych problemu
- 7. Obejście problemu AWS SNS dla limitu 100 000 tematów
- 8. Obejście problemu odwrotnego wywołania zależnego od argumentu?
- 9. Obejście problemu z błędem WPF Freezable?
- 10. Obejście problemu sprawdzania poprawności XSD/schematu w rdzeniu .net?
- 11. Obejście w mysql dla częściowego indeksu lub przefiltrowanego indeksu?
- 12. Przechowywanie mikrosekund w MySQL: jakie obejście?
- 13. Niejednoznaczne obejście dla wielowątkowości?
- 14. Obejście problemu Błąd 413 Jednostka żądania zbyt duża
- 15. Obejście problemu wycieku pamięci R z pakietem XML
- 16. Obejście problemu z brakiem lambdasów, które mogą przechwytywać zmienne zarządzane
- 17. Czy istnieje obejście problemu z brakiem śledzenia klasy typu?
- 18. Oracle SQL - czy istnieje standard, który zapewnia KAŻDE obejście problemu?
- 19. Obejście problemu z błędem Javy, który powoduje zrzut awaryjny
- 20. Obejście problemu: iOS 6 NSAttributedString Descenders Block Underline
- 21. Obejście problemu dla C# CodeDom powodującego przepełnienie stosu (CS1647) w csc.exe?
- 22. Jakiekolwiek obejście problemu z powodu braku wsparcia dla PadLeft w EF5.x?
- 23. Alternatywa dla typów wyliczeniowych w PHP5?
- 24. Wykonanie jeśli @@ rowcount> 0 resetuje @@ rowcount do 0. Dlaczego?
- 25. Przetwarzanie pełnotekstowe MySQL Obejście tabel innoDB
- 26. PHP7 Laravel Mcrypt wydanie
- 27. Obejście Silverlight UpdateTarget() dla BindingExpression
- 28. Obejście dla SSL na Heroku
- 29. obejście obejścia dla dynamicznego gettextu
- 30. PHP5 SQLite3 rekompilacji dla UPDATE, DELETE LIMIT
To nie wydaje się być problemem w PHP 5.4. Czy ktoś może potwierdzić? – David