Intereting Posts
Могу ли я использовать php с телефонной связью? Возможность запуска функции обновления БД при выборе выпадающего меню Как я могу прочитать содержимое каталога на удаленном сервере с помощью PHP? перенаправление на страницу без изменения URL-адреса Рекурсивное удаление CakePHP Как сделать автоматический вход в систему, сохранить сеанс в браузере Jquery отправляет массив ключей / значений в PHP Сохраненные процедуры и подготовленные заявления в PHP mysqli Использование try-catch PDO в функциях Показать определенный контент на основе текущего сеанса пользователя PHP как установить драйвер php mongodb на windows 8 и wamp server? Потоковая передача PDF в iframe с использованием dataurl – работает только в Chrome JetBrains WebIDE: подсказка типа переменной PHP? Манипулировать строку длиной 30 миллионов символов Что вызовет ошибку print_r и / или var_dump для отладки переменной?

Когда mysql_query возвращает false

Помимо написания неправильного запроса и отсутствия прав доступа к таблице, когда 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:

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

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

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

  • Доступ закрыт
  • Не удается подключиться к [локальному] серверу MySQL
  • Потерянное соединение с сервером MySQL
  • Клиент не поддерживает протокол аутентификации
  • Пароль не работает при вводе в интерактивный режим
  • Host 'host_name' заблокирован
  • Слишком много соединений
  • Недостаточно памяти
  • Сервер MySQL ушел
  • Слишком большой пакет
  • Ошибки связи и прерванные соединения
  • Таблица полна
  • Невозможно создать / записать в файл
  • Команды не синхронизированы
  • Игнорирование пользователя
  • Таблица 'tbl_name' не существует
  • Невозможно инициализировать набор символов
  • Проблемы с коррупцией в таблице
  • Проблемы с синтаксисом

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

  • Список ошибок клиента
  • Список распространенных ошибок, связанных с API
  • Ссылки на вопросы, связанные с запросом
  • Проблемы, связанные с таблицей
  • Другие проблемы, связанные с известными ошибками

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

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

Таким образом, кажется, что 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 *» – это ленивое кодирование, которое я знаю, но я никогда не мечтал, что запрос не будет запущен вообще!