Перейти к содержанию
kegel

как найти ошибку

Рекомендуемые сообщения

Подскажите как найти ошибку 1064. Интересует алгоритм поиска этой ошибки. Спасибо.

2013-05-19 13:56:37 - PHP Notice:  Error: 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 ' 552, 546, 514, 511, 507, 506, 503, 500) and pd.language_id = '1' AND p.status =' at line 1<br />Error No: 1064<br />SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p.product_id in ( 554, 552=, 552, 546, 514, 511, 507, 506, 503, 500) and pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND p2c.category_id = '24' GROUP BY p.product_id LIMIT 0,10 in /home/.../.../.../public_html/system/database/mysql.php on line 49

2013-05-20 5:23:03 - PHP Notice:  Error: 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 '1??) and pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() A' at line 1<br />Error No: 1064<br />SELECT p.product_id, (SELECT AVG(rating) AS total FROM review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p.product_id in ( 484, 217 1??) and pd.language_id = '1' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '0' AND p2c.category_id = '25' GROUP BY p.product_id LIMIT 0,2 in /home/.../.../.../public_html/system/database/mysql.php on line 49

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У Вас ошибка в SQL запросе,и судя по запросу в каталог\модель\каталог\product.php

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересует алгоритм поиска этой ошибки. Спасибо.

Алгоритм такой:

1. Читаете сообщение об ошибке. Там написано, что в SQL азпросе синтаксическая ошибка и приведён кусок, в корестностях которой ошибку можно увидеть.

2. Смотрите запрос, ищете часть с синтаксической ошибкой.

3. Находите приведенный кусок (выделено синим) и смотрите, что там рядом и где ошибка (выделено красным):

убрал код, т.к. раскраска испарилась, а перекрашивать снова некогда. Если словами непонятно, спросите ещё раз, может скриншотом сделаю.

Просто найдите приведенный кусок из сообщения об ошибке (... near 'вот эта часть вам нужна') и потом в запросе (он чуть дальше тоже процитирован в сообщении) посмотрите, что там за фигня написана. На ней MySQL и ломается:

1. ... WHERE p.product_id in ( 554, 552=, 552, 546, ...

2. ... WHERE p.product_id in ( 484, 217 1??) and pd.language_id = '1' ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересует алгоритм поиска этой ошибки.

 

обязательное условие - знание синтаксиса mysql.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

trance Спасибо! Нашел в этом файле запрос на который указывает ошибка.

rb2 Спасибо, это я понимаю, не понятно как узнать в каком файле находится запрос с ошибкой 

 

 

Фигню эту я вижу но откуда она берется не понятно. Запрос находится в функции public function getProducts и в нем синтаксических ошибок нет, так как он не изменялся и находится в изначальном виде. В этом файле изменялся один единственный запрос в функции public function getBestSellerProducts.

Был:

$query = $this->db->query("SELECT op.product_id, COUNT(*) AS total FROM " . DB_PREFIX . "order_product op LEFT JOIN `" . DB_PREFIX . "order` o ON (op.order_id = o.order_id) LEFT JOIN `" . DB_PREFIX . "product` p ON (op.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE o.order_status_id > '0' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY op.product_id ORDER BY total DESC LIMIT " . (int)$limit);

Стал:

$query = $this->db->query("SELECT op.product_id, SUM(op.total) AS total FROM " . DB_PREFIX . "order_product op LEFT JOIN `" . DB_PREFIX . "order` o ON (op.order_id = o.order_id) LEFT JOIN `" . DB_PREFIX . "product` p ON (op.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE o.order_status_id > '0' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY op.product_id ORDER BY total DESC LIMIT " . (int)$limit);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я ищу так:

1.нотепадом ++ ищу вхождение строки (если не понимаю где это) , например,
"SELECT p.product_id, (SELECT AVG(rating) AS total" - (беру чистый фрагмент,без подстановки переменных, без таких вариантов: LEFT JOIN " . DB_PREFIX . "product_to_store)
http://joxi.ru/kBGbUdg5CbAnZBK9xiY

2. Нашел, в данном случае это function getProducts.
Далее в большинстве случаев проходит такой вариант:
проверяю данные, пришедшие в запрос - перед текстом запроса ставлю
 

$buf=print_r($data,true);$this->log->write($buf);

 

где $data массив- параметр пришедший в функцию public function getProducts($data = array()).
В итоге в журнале ошибок у меня будет виден этот массив.

Так же я могу получить текст запроса:
если код имеет вид "$this->db->query("SELECT op.product_id..................",
то выношу текст запроса в переменную - $sql = "SELECT op.product_id.................";
Следующей строкой пишу запись в журнал ошибок текста запроса $this->log->write( $sql);
И следующей выполнение запроса 
$this->db->query( $sql);

С полученным текстом запроса уже играюсь в phpMyAdmin.

Можно и сразу скопировать ошибку и в phpMyAdmin.

В вашем случае надо смотреть что приходит в массиве  и подставляется в WHERE p.product_id in (.


 

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

sergiosinicin

Спасибо за подробное разъяснение. Плюсую.+

В вашем случае надо смотреть что приходит в массиве  и подставляется в WHERE p.product_id in (.


В самом запросе я не вижу этого условия WHERE p.product_id in. Ткните пожалуйста носом на него.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

sergiosinicin

Спасибо за подробное разъяснение. Плюсую.+

В вашем случае надо смотреть что приходит в массиве  и подставляется в WHERE p.product_id in (.

В самом запросе я не вижу этого условия WHERE p.product_id in. Ткните пожалуйста носом на него.

без файла проблематично.

скайп: sergiosinicin

условие может быть ниже

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 5/21/2013 в 12:40, sergiosinicin сказал:

без файла проблематично.

скайп: sergiosinicin

условие может быть ниже

Та же проблема, не экспортируются товары . 
И тот же код ошибки, помогите пожалуйста.

@sergiosinicin

product.php

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 5/21/2013 в 12:40, sergiosinicin сказал:

без файла проблематично.

скайп: sergiosinicin

условие может быть ниже

Та же проблема, не экспортируются товары . 
И тот же код ошибки, помогите пожалуйста.

@sergiosinicin

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Та же проблема, не экспортируются товары . 
И тот же код ошибки, помогите пожалуйста.
[mention=7649]sergiosinicin[/mention]
?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.