This article has been localized into Russian by the community.
Обработка ошибок в 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-ошибки в будущем. Приведенная в примере выше довольно очевидна, и ее легко исправить, в то время как другие ошибки могут скрываться от неопытного взгляда.