Intereting Posts
Остановить выполнение сценария при уведомлении / предупреждении Проблема с SQL-запросом (со снимком экрана) Массив для названных переменных Генератор случайных строк PHP Создание веб-интерфейса для Android-приложения с использованием API-интерфейсов Android. Функция PHP MySQL Удалить во время цикла Как реализовать сочетания клавиш на веб-сайтах Как настроить аутентификацию пользователя с динамическими атрибутами пользователя? Я хочу взорвать переменную несколько иначе Лучший подход для (кросс-платформенной) потоковой передачи данных в реальном времени в PHP? PHP – Встраивание сгенерированного изображения из внешнего файла в электронную почту HTML Как кодировать URL-адрес с помощью php-подобных браузеров PHP удаляет специальный символ из строки Есть ли разумный способ запуска нескольких запросов в mysql, разделенных точкой с запятой; 64-разрядная версия Linux / Ubuntu и openssl (не удалось прочитать символы: Плохое значение)

Каков правильный способ проверить, возвратили ли mysql_query () какие-либо результаты?

Я пробовал то, что казалось самым интуитивным подходом

$query = "SELECT * FROM members WHERE username = '$_CLEAN[username]' AND password = '$_CLEAN[password]'"; $result = mysql_query($query); if ($result) { ... 

но это не сработало, потому что mysql_query возвращает истинное значение, даже если возвращается 0 строк. Я в основном хочу выполнить логику в этом условии, только если строка возвращается.

Использовать mysql_num_rows :

  if (mysql_num_rows($result)) { //do stuff } 

Если вы проверяете ровно одну строку:

 if ($Row = mysql_fetch_object($result)) { // do stuff } 

mysql_fetch_array() этого вы можете использовать mysql_fetch_array() или что-то еще, но принцип тот же. Если вы ожидаете 1 или более строк:

 while ($Row = mysql_fetch_object($result)) { // do stuff } 

Это будет зацикливаться до тех пор, пока не закончится ряд строк, после чего оно будет продолжено.

mysql_num_rows

Извлекает количество строк из набора результатов. Эта команда действительна только для таких операторов, как SELECT или SHOW, которые возвращают фактический набор результатов.

Если они не совпадают, то нуль будет возвратным значением и фактически FALSE .

 $result = mysql_query($query); if(mysql_num_rows($result)) { //-- non-empty rows found fitting your SQL query while($row = mysql_fetch_array($result)) {//-- loop through the rows, //-- each time resetting an array, $row, with the values } } 

Что все хорошо и хорошо, если вы только выходите из базы данных. Если вы меняете или удаляете строки из базы данных и хотите знать, сколько из них было затронуто …

Чтобы получить количество строк, на которые влияет запрос INSERT, UPDATE, REPLACE или DELETE, используйте mysql_affected_rows() .

 $result = mysql_query($query); if(mysql_affected_rows()) { //-- database has been changed } //-- if you want to know how many rows were affected: echo 'Rows affected by last SQL query: ' .mysql_affected_rows(); 

mysql_query() вернет FALSE если запрос mysql_query() неудачно. Он вернет TRUE даже если у вас нет строк, но успешно запросил базу данных.

 $sql = "SELECT columns FROM table"; $results = mysql_query($sql, $conn); $nResults = mysql_num_rows($results); if ($nResults > 0) { //Hurray } else { //Nah } 

Это должно сработать.

Я использовал следующее:

if ($ result! = 0 && mysql_num_rows ($ result)) {

Если запрос ничего не возвращает, он будет логическим результатом и будет равен 0.

Поэтому вы проверяете, является ли это ноль или нет, а если нет, мы знаем, что там что-то есть.

ОДНАКО, иногда он возвращает 1, даже если там ничего нет, поэтому вы ТОГДА проверяете, есть ли какие-либо строки, и есть ли там полная строка, вы точно знаете, что результат был возвращен.

Как насчет этого пути:

 $query = "SELECT * FROM members WHERE username = '$_CLEAN[username]' AND password = '$_CLEAN[password]'"; $result = mysql_query($query); $result = mysql_fetch_array($result); //you could then define your variables like: $username = $result['username']; $password = $result['password']; if ($result) { ... 

Мне это нравится, потому что я получаю очень специфические результаты, полученные из mysql_query.

-Иван Новак

Что ж…

by definiton mysql_query:

mysql_query () возвращает ресурс с успехом, или FALSE при ошибке.

но то, что вам нужно понять, – это если эта функция возвращает значение, отличное от FALSE, запрос был запущен без проблем (правильный синтаксис, подключение еще живое и т. д.), но это не означает, что запрос возвращает некоторую строку.

например

 <?php $result = mysql_query("SELECT * FROM a WHERE 1 = 0"); print_r($result); // => true ?> 

поэтому, если вы получите ЛОЖЬ, вы можете использовать

mysql_errorno() и mysql_error() чтобы узнать, что произошло.

следующим образом:

вы можете использовать mysql_fetch_array () для получения строки за строкой из запроса

 $result = mysql_query(...); if(false !== $result) { //... }