Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


kegel

Recommended Posts

Подскажите как найти ошибку 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

 

Надіслати
Поділитися на інших сайтах


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

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

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' ...

Надіслати
Поділитися на інших сайтах


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

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

Надіслати
Поділитися на інших сайтах


  • 4 years later...
В 5/21/2013 в 12:40, sergiosinicin сказал:

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

скайп: sergiosinicin

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

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

@sergiosinicin

product.php

Надіслати
Поділитися на інших сайтах


В 5/21/2013 в 12:40, sergiosinicin сказал:

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

скайп: sergiosinicin

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

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

@sergiosinicin

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.