TOC

This article has been localized into Russian by the community.

PHP и MySQL:

Обработка ошибок в MySQL

При совместном использовании PHP и MySQL вы в конце-концов столкнетесь с ситуацией, когда вы допустите какую-то ошибку в SQL-запросе, такую как опечатка в заголовке столбца или в ключевом слове, или что-то подобное. По умолчанию, PHP не покажет вам, в чем именно проблема, только что вы написали некорректный запрос. Давайте попробуем написать запрос с ошибкой, чтобы получить ответ от PHP:

$query = mysql_query("SELECT id, namme FROM test_users");
while($row = mysql_fetch_array($query))
    echo $row['id'] . " - " . $row["name"] . " is from " . $row["country"] . "<br />";

Это пример на подобие множества других в данном разделе руководства, но в данном случае мы допустили опечатку в названии столбца, что приводит к следующей ошибке:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in test.php on line 7 Перевод: Предупреждение: mysql_fetch_array(): переданный аргумент не является корректным результатом MySQL-запроса в файле test.php на строке 7

Как вы можете видеть, ошибка не будет выброшена, пока мы не попытаемся использовать результат, возвращенный функцией mysql_query(), что мы и делаем, когда вызываем функцию mysql_fetch_array(), которая в моем файле расположена на строке 7. Выведенная ошибка имеет очень размытую формулировку и не особенно полезна. Это сделано специально, поскольку знание о структуре базы данных делает сайт более уязвимым к атакам типа SQL-инъекций, эту проблему мы обсудим позже.

Возможно, вам удастся заметить ошибку и исправить ее во многих случаях, но если нет, вы можете использовать функцию mysql_error(), чтобы получить немного больше информации о проблеме. Эта функция просто возвращает все ошибки, полученные при выполнении SQL-запроса в последней вызванной функции. Вы должны использовать эту функцию, только чтобы находить и исправлять ошибки, а потом удалять ее, как только проблема решена. Рассмотрим предыдущий пример, но добавим в него вызов функции mysql_error(), чтобы получить больше информации:

$query = mysql_query("SELECT id, namme FROM test_users");
while($row = mysql_fetch_array($query))
    echo $row['id'] . " - " . $row["name"] . " is from " . $row["country"] . "<br />";
echo mysql_error();

Это даст вам гораздо более информативное сообщение об ошибке:

Unknown column 'namme' in 'field list' Перевод: Неизвестный столбец 'namme' в 'field list'

Попробуйте сделать разные ошибки в SQL-запросе и посмотрите, какие сообщения об ошибках вернет вам MySQL через функцию mysql_error(), чтобы увидеть, как он реагирует. Это поможет вам быстрее идентифицировать SQL-ошибки в будущем. Приведенная в примере выше довольно очевидна, и ее легко исправить, в то время как другие ошибки могут скрываться от неопытного взгляда.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!