Когда запрос mysql возвращает false

помимо написания неправильного запроса и отсутствия разрешений на доступ к таблице, когда mysql_query возвращает false? Есть ли другие случаи?

5 ответов


см. справочное руководство:

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

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

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

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

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

http://php.net/manual/en/function.mysql-query.php

Edit: уточнение того, что эти ошибки на самом деле.

Итак, у нас есть список вещей, которые могут возвращать false:

  • когда оператор MySQL, который возвращает resultset, получает ошибку
  • когда оператор MySQL, который ничего не возвращает, получает ошибку
  • когда пользователь не имеет разрешения MySQL на доступ к ссылке таблицы

на мой взгляд первые 2-это те, которые немного рассеянный. Каковы возможные ошибки? Есть 59 различных ошибок клиента, которые вы можете получить от MySQL. Это больше системных ошибок, которые мы можем предположить, что php будет обрабатывать и, вероятно, обернуть в меньшее количество абстрактных ошибок.

за исключением тех ошибок клиента, у вас есть набор более абстрактных ошибок, с которыми вы можете столкнуться во время использования, которое больше связано с используя фактический API внутри приложения, а не необработанный доступ к серверу MySQL. Таковыми являются:

  • Доступ запрещен
  • не удается подключиться к [локальному] серверу MySQL
  • потерянное соединение с сервером MySQL
  • клиент не поддерживает протокол аутентификации
  • Сбой Пароля При Интерактивном Вводе
  • хост 'host_name' заблокирован
  • слишком много соединений
  • из память!--26-->
  • сервер MySQL ушел
  • пакет слишком большой
  • ошибки связи и прерванные соединения
  • стол полон
  • не удается создать / записать в файл
  • команды не синхронизированы
  • игнорировать
  • таблица 'tbl_name' не существует
  • не удается инициализировать набор символов
  • проблемы таблица с коррупцией!--26-->
  • синтаксис, связанных с вопросы

вот ссылки на то, что я только что сказал:


Спасибо за ваш комментарий.
Я уверен, нет никакой необходимости копаться в таких деталях.

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

Итак, кажется, что mysql_error() функция действительно то, что вы ищете.

$res = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);

выглядит достаточно.


к сожалению, справочное руководство не очень конкретно, когда дело доходит до того, какие возможные способы вызвать ошибки. Помимо синтаксически недопустимых операторов и отсутствия разрешений, превышение предела для создания новых операторов является возможной ошибкой, которая может появиться, если вы испытываете высокую нагрузку.


UPDATE query вернет false, если запрос правильно написан, но строки не затронуты, например:

UPDATE `table` SET `id`=1 WHERE `id`=1

У меня была эта ошибка и mysql_error() вернул "MySQL сервер ушел". Мой запрос был очень простым выбором запроса * из очень маленькой таблицы. Когда я изменил " Select *", чтобы выбрать два столбца, которые я хотел, это решило проблему. "Select *" - это ленивое кодирование, которое я знаю, но я никогда не думал, что это заставит запрос не работать вообще!