#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;