Как проверить результаты запроса db, используя PHP PDO

Как проверить, пуст ли мой результирующий набор, используя 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>'; } 

Я делал это так:

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

Но только начали использовать PDO и подготовленные операторы, и проверка на $STH не работает должным образом – она ​​всегда имеет ценность!

Я бы попытался использовать rowCount() :

 $rows_found = $STH->rowCount(); 

Но, согласно руководству:

Если последний оператор SQL, выполняемый связанным с ним PDOStatement, был оператором SELECT, некоторые базы данных могут возвращать количество строк, возвращаемых этим оператором. Однако это поведение не гарантируется для всех баз данных и не должно полагаться на переносные приложения.

Если это не сработает для вас, вы можете использовать другой метод, упомянутый в руководстве.

Вы можете, конечно, также установить переменную перед циклом while, изменить ее в своем цикле и проверить значение после цикла …

Просто дампируйте информацию об переменной.

 var_dump($STH) 

РЕДАКТИРОВАТЬ

У меня только вопрос. Для этого есть rowCount() . Просто используйте $STH->rowCount(); для подсчета строк, а затем сравните его.

Хорошо, вот код, который он действительно работает, и, наконец, после нескольких часов оглядывания и сочетания ответов на некоторые ответы здесь будет тот, который фактически вернет счет на ваш оператор select. SQL – это оператор select, очевидно, $ username1 – это сообщение текстового поля для имени пользователя. $ password1 – это то же самое, что и установка имени пользователя. Помимо этого у вас должно быть все, что вам нужно, чтобы заставить его работать, вместо ваших переменных вместо моих. Надеюсь, это спасет некоторых людей, когда я искал, пытаясь получить именно то, что я хотел здесь. Это решение для тех случаев, когда у вас есть оператор select, и вы хотите, чтобы иметь возможность продолжать или останавливаться на его возврате.

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