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