Jak sprawdzić wyniki zwracane przez db przy użyciu PDO PHP

Jak sprawdzić, czy mój zestaw wyników jest pusty przy użyciu PDO w PHP?

$SQL = "SELECT ......... ORDER BY lightboxName ASC;";
$STH = $DBH->prepare($SQL);
$STH->bindParam(':member_id', $member_id);
$STH->execute();
$STH->setFetchMode(PDO::FETCH_ASSOC);

while($row = $STH->fetch()) {
    $lightbox_name = $row['lightboxName'];
    $lightbox_id = $row['lightboxID'];
    echo '<option value="'.$lightbox_id.'">'.$lightbox_name.'</option>';
}

Robiłem to w ten sposób:

$result = mysql_query("SELECT ...... ORDER BY lightboxName ASC;");
if(!$result) { echo 'No results found!'; }

Ale dopiero zacząłem korzystać z PDO i przygotowanych oświadczeń i sprawdzać$STH nie działa zgodnie z oczekiwaniami - zawsze ma wartość!

questionAnswers(3)

Wystarczy zrzucić informacje o zmiennej.

var_dump($STH)

EDYTOWAĆ

Właśnie dostałem pytanie. JestrowCount() funkcja dla tego. Po prostu użyj$STH->rowCount(); dla liczby wierszy porównaj.

 Valeh Hajiyev14 wrz 2012, 19:59
nie ma problemu, jesteś mile widziany :)
 ShadowStorm14 wrz 2012, 19:48
@ mk_89: Nie mam zmiennej $ result, mam zmienną $ STH i zawsze zawiera ona dane, czy ma zestaw wyników, czy nie.
 Valeh Hajiyev14 wrz 2012, 19:49
Właśnie dostałem pytanie. Jest do tego funkcja rowCount (). Wykonaj $ STH-> rowCount ();
 mk_8914 wrz 2012, 19:46
zrób coś takiego jak return $ result, a następnie print_r ()
 ShadowStorm14 wrz 2012, 19:43
To nie jest odpowiedź na moje pytanie! Nie chcę zrzucać mojej zmiennej. Chcę sprawdzić, czy zapytanie do bazy danych zwróciło wyniki!
 ShadowStorm14 wrz 2012, 19:58
Dzięki stary. Edytuję swój głos. Ktoś inny odpowiedział przed tobą, więc niestety zaakceptuję ich odpowiedź. Dzięki, tak ”.
QuestionSolution

Chciałbym spróbować użyćrowCount():

$rows_found = $STH->rowCount();

Ale zgodnie z instrukcją:

Jeśli ostatnia instrukcja SQL wykonywana przez powiązaną PDOStatement była instrukcją SELECT, niektóre bazy danych mogą zwrócić liczbę wierszy zwróconych przez tę instrukcję. Jednak zachowanie to nie jest gwarantowane dla wszystkich baz danych i nie powinno się polegać na aplikacjach przenośnych.

Jeśli to nie działa, możesz użyć innej metody wymienionej w instrukcji.

Możesz oczywiście ustawić zmienną przed swojąwhile pętla, zmień ją w pętli i sprawdź wartość po pętli ...

 Akronix20 sty 2017, 18:37
Do czego odnosi się „inna metoda wymieniona w instrukcji”?
 jeroen14 wrz 2012, 22:25
@ShadowStormcolumnCount() powinien być superszybki, ale potem znowurowCount() a także jeśli jest dostępna. Musisz to sprawdzić, żeby mieć pewność.
 ShadowStorm14 wrz 2012, 19:55
Idealny. Działa zgodnie z przeznaczeniem. Właśnie czytałem o tym, a innym sposobem jest użycie columnCount (). Czy uważasz, że istnieje różnica w wydajności między rowCount () i columnCount ()?
 Ben18 wrz 2013, 05:03
znalazłemcolumnCount() działa najlepiej, ponieważ wróci0 we wszystkich moich przypadkach testowych.rowCount() często zwraca zmodyfikowane wiersze i wyrzuca moją logikę.

OK tutaj jest kod, który działa i wreszcie po kilku godzinach rozglądania się i mieszania dopasowywania niektóre odpowiedzi tutaj to taka, która faktycznie zwróci liczbę na twojej instrukcji select. SQL jest instrukcją select, oczywiście $ username1 jest postem pola tekstowego dla nazwy użytkownika. $ password1 jest taki sam jak konfiguracja nazwy użytkownika. Poza tym powinieneś mieć wszystko, czego potrzebujesz, aby działało, po prostu zastąp swoje zmienne zamiast moich. Mam nadzieję, że zaoszczędzi to trochę czasu, gdy szukałem czegoś, próbując uzyskać dokładnie to, co chciałem. To rozwiązanie dotyczy sytuacji, w której masz instrukcję wyboru i chcesz mieć możliwość kontynuowania lub zatrzymania na podstawie jej zwrotu.

SQL = 'SELECT * from Users WHERE Username = :Username AND Password = :Password';
STH = $conn->prepare($SQL);
STH->bindParam(':Username', $username1);
STH->bindParam(':Password', $password1);
STH->execute();
STH->setFetchMode(PDO::FETCH_ASSOC);


row_count = $STH->rowCount();

yourAnswerToTheQuestion