Помимо написания неправильного запроса и отсутствия прав доступа к таблице, когда mysql_query
возвращает false? Есть ли другие случаи?
См. Справочное руководство:
Для 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, если у пользователя нет разрешения на доступ к таблицам, на которые ссылается запрос.
http://php.net/manual/en/function.mysql-query.php
Изменить: Прояснение того, что эти ошибки на самом деле.
Итак, у нас есть список вещей, которые могут возвращать false:
На мой взгляд, первые 2 – это те, которые немного размыты. Каковы возможные ошибки? Существует 59 различных ошибок клиента, которые вы можете получить от MySQL. Это больше системных ошибок, которые мы можем предположить, что PHP будет обрабатывать и, вероятно, обернуть меньшее количество абстрактных ошибок.
За исключением тех ошибок клиента, у вас есть набор более абстрактных ошибок, которые вы можете встретить во время использования, что больше связано с использованием фактического API внутри приложения, а не с необработанным доступом к серверу MySQL. Это:
Вот ссылки на то, что я только что сказал:
Спасибо за ваш комментарий.
Я уверен, что абсолютно никакой необходимости вникать в такие детали.
Вам действительно нужно сообщение об ошибке, которое вы можете прочитать и, таким образом, получить информацию о конкретной проблеме.
Таким образом, кажется, что mysql_error()
действительно то, что вы ищете.
$res = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
выглядит достаточно достаточно.
К сожалению, справочное руководство не очень специфично, когда речь идет о возможных способах запуска ошибок. Помимо синтаксически недействительных утверждений и отсутствия разрешений, превышение предела для создания новых операторов является возможной ошибкой, которая может появиться, если вы испытываете высокую нагрузку.
Запрос UPDATE возвращает false, если запрос правильно написан, но не затронуты строки, например:
UPDATE `table` SET `id`=1 WHERE `id`=1
У меня была эта ошибка, и mysql_error () вернул «сервер MySQL ушел». Мой запрос был очень простым запросом, выбрав * из очень маленькой таблицы. Когда я изменил «Выбрать *», чтобы выбрать два столбца, я хотел, чтобы он разрешил проблему. «Select *» – это ленивое кодирование, которое я знаю, но я никогда не мечтал, что запрос не будет запущен вообще!