PHP и MySQL, что возвращается, когда запрос не выдает строк?

#php #mysql

#php #mysql

Вопрос:

Я немного смущен чем-то в интерфейсе PHP к MySQL. Документация для mysql_query (используется для выполнения команд и запросов) говорит об этом для возвращаемых значений:

Для SELECT , SHOW, DESCRIBE, EXPLAIN и других операторов, возвращающих набор результатов, mysql_query() возвращает ресурс при успешном выполнении или FALSE при ошибке.

Для других типов операторов SQL, INSERT, UPDATE, DELETE, DROP и т. Д., mysql_query() возвращает TRUE при успешном выполнении или FALSE при ошибке.

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

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

mysql_query() также завершится ошибкой и вернет FALSE, если у пользователя нет разрешения на доступ к таблицам, на которые ссылается запрос.

Я понимаю, что могу вызвать mysql_num_rows, чтобы получить количество возвращенных строк из запроса, предполагая, что я выполнил команду в наборе {SELECT, SHOW, DESCRIBE, EXPLAIN} .

Помимо этого, однако… что произойдет, если запрос в этом наборе выполняется успешно (с точки зрения базы данных), но не возвращает результирующих строк? Возвращает ли mysql_query true или false в этом случае (т. Е. Является ли это условием сбоя)? Каков наилучший способ проверить возможность успешного запроса «без результатов» с использованием этого интерфейса?

Ответ №1:

Это относится к первой части документации:

Для SELECT , SHOW, DESCRIBE, EXPLAIN и других операторов, возвращающих набор результатов, mysql_query() возвращает ресурс при успешном выполнении или FALSE при ошибке.

Запрос, который не возвращает результирующих строк, не вернет ни true , ни false , но объект ресурса.

Однако объект ресурса не будет иметь строк, т. Е. mysql_num_rows() Вернется 0 , и первый вызов mysql_fetch_* вернется FALSE . Существует несколько способов, которыми вы можете обнаружить эту ситуацию, но вызов mysql_num_rows() , вероятно, один из самых простых.

Комментарии:

1. @Johan: он не вернется true .

Ответ №2:

не уверен, что это лучший способ, но я обычно использую mysql_num_rows для проверки ресурса результата и если

 $countt = mysql_num_rows($resource);
if($count>0)
{
//do further
}
  

например, в этом случае.

Ответ №3:

чтобы увидеть, что он возвращает, используйте

 $result = mysql_query("SELECT * FROM  customers WHERE phone = $phoneNum", $link);
		
		$count = mysql_num_rows($result);

					echo $count;