2012-09-14 12 views
5

Jak sprawdzić, czy mój zestaw wyników jest pusty przy użyciu PDO w PHP?Jak sprawdzić zapytanie db zwróciło wyniki używając PDO 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>'; 
} 

kiedyś zrobić to tak:

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

Ale właśnie zaczął używać PDO i przygotowane oświadczeń i sprawdziany przed $STH nie wydają się działać zgodnie z oczekiwaniami - to zawsze ma wartość!

Odpowiedz

8

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

$rows_found = $STH->rowCount(); 

Ale według instrukcji:

Jeśli ostatnia instrukcja SQL wykonywane przez związanego PDOStatement był SELECT, niektóre bazy danych może zwróć liczbę wierszy zwróconych przez to polecenie. Jednak zachowanie to nie jest gwarantowane dla wszystkich baz danych i nie należy polegać na aplikacjach przenośnych .

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

Można oczywiście również ustawić zmienną przed pętlą while, zmienić go w pętli i sprawdzić wartość po pętli ...

+0

Idealny. Działa zgodnie z przeznaczeniem.Właśnie o tym czytałem, a innym sposobem jest użycie columnCount(). Czy sądzisz, że istnieje różnica w wydajności między rowCount() i columnCount()? – ShadowStorm

+0

@ShadowStorm 'columnCount()' powinien być super szybki, ale z drugiej strony, 'rowCount()', jeśli jest dostępny. Musiałbyś to sprawdzić, żeby się upewnić. – jeroen

+1

Znalazłem 'columnCount()' działa najlepiej, ponieważ zwróci '0' pod wszystkich moich przypadków testowych. 'rowCount()' często zwraca zmodyfikowane wiersze i wyrzuca moją logikę. – Ben

1

Po prostu zrzutu informacji o zmiennej.

var_dump($STH) 

EDIT

Właśnie na to pytanie. Jest do tego funkcja rowCount(). Po prostu użyj $STH->rowCount(); dla liczby rzędów, a następnie porównaj ją.

+2

To nie jest odpowiedź na moje pytanie! Nie chcę zrzucać zmiennej. Chcę sprawdzić, czy zapytanie bazy danych zwróciło wyniki! – ShadowStorm

+0

coś takiego jak return $ result, a następnie print_r() –

+0

@ mk_89: Nie mam zmiennej $ result, mam zmienną $ STH i zawsze zawiera dane, czy ma zestaw wyników czy nie. – ShadowStorm

0

OK Oto kod to działa i wreszcie po kilku godzinach rozglądania się i mieszania pasujące niektóre odpowiedzi tutaj jest taki, który w rzeczywistości zwraca liczbę na wyciągu wyboru. SQL jest instrukcją select oczywiście $ username1 jest postem pola tekstowego dla nazwy użytkownika. Hasło password1 jest takie samo, jak konfiguracja nazwy użytkownika. Poza tym powinieneś mieć wszystko, czego potrzebujesz, aby to działało, po prostu zastąp swoje zmienne w miejsce moje. Mam nadzieję, że oszczędza to trochę czasu, gdy szukałem, próbując dostać dokładnie to, co chciałem. To rozwiązanie dotyczy sytuacji, gdy masz polecenie wyboru i chcesz móc kontynuować lub zatrzymać na podstawie tego, że coś zwróci.

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();