2011-12-20 3 views
9

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

+0

По какой-то причине вам нужна такая нечетная информация? –

+0

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

ответ

14

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

Для 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(), чтобы узнать, сколько строк были затронуты удаление, вставка, REPLACE или UPDATE заявление.

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

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

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

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

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

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

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

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

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

+0

Я красную эту страницу ПЕРЕД записью, и я не понял одну вещь: когда INSERT может вернуть false? – AsTheWormTurns

+0

@AsTheWormTurns, когда что-то пойдет не так, и значения НЕ были вставлены. – Shoe

+0

@Jeff Pigarelli: мой вопрос ищет это «что-то» :-) – AsTheWormTurns

2

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

4

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

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

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

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

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

+0

Спасибо и извините, если вопрос звучал слишком странно. :-) – AsTheWormTurns

+0

похоже, что это не только звучало, но и имеет то же странное значение. Удачи в создании квадратного колеса. –

+0

Sharpnel: проблема заключается в том, что код, который я модифицировал, не имел колес вообще. :-) – AsTheWormTurns

1

UPDATE запрос возвращает ложь, если запрос правильно написано, но ни одна строка не затронута, например:

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

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

Смежные вопросы