2012-09-14 9 views
5

Wie überprüfe ich, ob meine Ergebnismenge mit PDO in PHP leer ist?Wie überprüfe ich db-Abfrage zurückgegebene Ergebnisse mit PHP-PDO

$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>'; 
} 

Ich benutzen es, wie dies zu tun:

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

Aber habe gerade erst begonnen mit PDO und vorbereiteten Anweisungen und Kontrolle gegen $STH scheine nicht zu funktionieren wie erwartet - Wert hat es immer!

Antwort

8

Ich würde versuchen, rowCount() zu verwenden:

$rows_found = $STH->rowCount(); 

Aber nach dem Handbuch:

Wenn die letzte von der zugeordneten PDOStatement ausgeführten SQL-Anweisung eine SELECT-Anweisung war, einige Datenbanken können gibt die Anzahl der von dieser Anweisung zurückgegebenen Zeilen zurück. Dieses Verhalten ist jedoch nicht für alle Datenbanken garantiert und sollte nicht für tragbare Anwendungen verwendet werden.

Wenn es für Sie nicht funktioniert, können Sie die andere im Handbuch erwähnte Methode verwenden.

Sie können natürlich auch eine Variable vor Ihrer while Schleife gesetzt, es in der Schleife ändern und den Wert nach der Schleife prüfen ...

+0

Perfekt. Funktioniert wie vorgesehen.Ich habe gerade darüber gelesen und eine andere Möglichkeit, dies zu tun, ist die Verwendung von columnCount(). Glauben Sie, dass es einen Leistungsunterschied zwischen rowCount() und columnCount() gibt? – ShadowStorm

+0

@ShadowStorm 'columnCount()' sollte super-schnell sein, aber auch 'rowCount()', wenn es verfügbar ist. Sie müssten das testen, um sicher zu gehen. – jeroen

+1

Ich fand 'columnCount()' funktioniert am besten, weil es unter allen meinen Testfällen '0' zurückgibt. 'rowCount()' gibt oft die geänderten Zeilen zurück und verwirft meine Logik. – Ben

1

Nur Informationen über Variable ausgeben.

var_dump($STH) 

EDIT

Ich habe gerade die Frage. Dafür gibt es rowCount() Funktion. Verwenden Sie einfach $STH->rowCount(); für die Zeilenanzahl, dann vergleichen Sie es.

+2

Das ist keine Antwort auf meine Frage! Ich möchte meine Variable nicht ausgeben. Ich möchte überprüfen, ob die Datenbankabfrage Ergebnisse liefert! – ShadowStorm

+0

mache sowas wie return $ result und dann print_r() –

+0

@ mk_89: Ich habe keine $ result-Variable, ich habe $ STH-Variable und sie enthält immer Daten, ob es ein Resultset hat oder nicht. – ShadowStorm

0

OK hier ist der Code es funktioniert und schließlich nach ein paar Stunden Sich umzusehen und zu mixen, um hier einige Antworten zu finden, ist eine, die in der Tat eine Zählung auf deine select-Anweisung zurückgibt. SQL ist die Select-Anweisung offensichtlich $ Benutzername1 ist der Post des Textfelds für den Benutzernamen. $ password1 ist identisch mit dem Benutzernamen-Setup. Abgesehen davon sollten Sie alles, was Sie brauchen, um es funktionieren zu lassen einfach ersetzen Sie Ihre Variablen anstelle von mir. Ich hoffe, dass dies einigen Leuten Zeit spart, während ich eine Weile suchte, um genau das zu bekommen, was ich hier wollte. Diese Lösung ist für, wenn Sie eine Select-Anweisung haben und Sie in der Lage sein möchten, fortzusetzen oder zu stoppen, basierend darauf, dass etwas zurückgegeben wird.

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