Как найти ошибку в SQL-запросе
SQL-запрос - это то, что либо работает хорошо, либо не работает вообще, частично он никак работать не может, в отличие, например, от того же PHP. Как следствие, найти ошибку в SQL-запросе, просто рассматривая его - трудно, особенно если этот запрос снабжён целой кучей JOIN и UNION. Однако, в этой статье я расскажу о методе поиска ошибок в SQL-запросе.
Поскольку обычно в SQL-запрос подставляются какие-то переменные в PHP, то необходимо его сначала вывести. Сделать это можно, например, так:
<?php
$a = 5;
$query = "SELECT FROM `table` WHERE `id` = '$a'";
$result_set = $mysqli->query($query); // Не работает
echo $query; // Выводим запрос, который отправляется
?>
В результате, скрипт выведет такой запрос: SELECT FROM `table` WHERE `id` = '5'. Теперь чтобы найти ошибку в нём, надо зайти в phpMyAdmin, открыть базу данных, с которой происходит работа, открыть вкладку "SQL" и попытаться выполнить запрос.
И вот здесь уже ошибка будет показана, не в самой понятной форме (иногда прямо точно описывает ошибку), но она будет. Вот что написал phpMyAdmin: "#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM `table` WHERE `id` = '5' ORDER BY `table`.`id` ASC LIMIT 0, 30' at line 1". Это означает, что ошибка рядом с FROM. Присматриваемся к этому выделенному нами небольшому участку и обнаруживаем, что мы забыли поставить "*". Исправляем сразу в phpMyAdmin эту ошибку, убеждаемся, что запрос сработал и после этого идём исправлять ошибку уже в коде.
С помощью этого метода я нахожу абсолютно все ошибки в SQL-запросе, которые мне не удаётся обнаружить непосредственно при осмотре в PHP-коде.
Надеюсь, теперь и Вы сможете найти ошибку в любом SQL-запросе.
-
- Михаил Русаков
Комментарии (1):
Здравствуйте Михаил! Пробовал найти ошибку в запросе по вашей подсказке, но ничего не получается. Если можно подскажите чего здесь не хватает. ************************************ $sql_banip = mysql_query("SELECT `banserfip` FROM `tb_statistics` WHERE `id`='1'"); ** Линия 44 --- $vsego_banip = mysql_result($sql_banip,0,0); ********************************* Warning: mysql_result(): Unable to jump to row 0 on MySQL result index 9 in /home/forexbiz/forexbiz.org.ua/nikbux/view_sites.php on line 44 ******************************* результат проверки в SQL: Ответ MySQL: Документация #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$sql_banip = mysql_query("SELECT `banserfip` FROM `tb_statistics` WHERE `id`='1'' at line 1 С уважением Сергей.
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.