0 Пользователей и 1 Гость просматривают эту тему.
  • 5 Ответов
  • 927 Просмотров
*

CityCat

  • Осваиваюсь на форуме
  • 40
  • 0 / 0
  • Алексей Voronov
Здравствуйте!

Помогите разобраться, я не очень силен в запросах php в БД.

Если у товара нет атрибутов, то при запросе вываливается в ошибку:
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 ')' at line 3

Посмотрел логи, ругается на файл вывода товара в JoomShopping - product_default.php
Файл в шаблоне, кастомизирован.

Строка, которая глюкавит:

Код
                            ->where($db->quoteName('attr_id'). ' IN (' . implode(',', $attrs). ')');

Как бы сделать так, чтобы если нет атрибутов товара, то он не обрабатывал эту строку, а если есть атрибут, то выводил.

Весь кусок кода из шаблона:

Код
                        <?php
                        $db = JFactory::getDbo();
                        $query = $db->getQuery(true);

                        $query
                            ->select('*')
                            ->from($db->quoteName('#__jshopping_products_attr'))
                            ->where($db->quoteName('product_id'). ' = '. $db->quote($product->product_id));

                        $db->setQuery($query);

                        $productAttrs = $db->loadObjectList();

                        foreach ($productAttrs as $prodAttrs) {
                            foreach ($prodAttrs as $key => $value)
                                if ((strpos($key, 'attr') === 0) && ($value != 0)) {
                                    $attrs[] = substr($key, 5);
                                    $values[] = $value;
                                    $product->options[$prodAttrs->product_attr_id]['attrs'][substr($key, 5)] = $value;
                                }
                            $product->options[$prodAttrs->product_attr_id]['price'] = $prodAttrs->price;
                            $product->options[$prodAttrs->product_attr_id]['manufacturer_code'] = $prodAttrs->manufacturer_code;
                        }

                        $query = $db->getQuery(true);

                        $query
                            ->select($db->quoteName(array('attr_id', 'name_ru-RU', 'description_ru-RU'), array('id', 'name', 'description')))
                            ->from($db->quoteName('#__jshopping_attr'))
[b]                            ->where($db->quoteName('attr_id'). ' IN (' . implode(',', $attrs). ')');[/b]

                        $db->setQuery($query);
                        $attrs = $db->loadObjectList('id');

                        $query = $db->getQuery(true);

                        $query
                            ->select($db->quoteName(array('value_id', 'name_ru-RU'), array('id', 'name')))
                            ->from($db->quoteName(array('#__jshopping_attr_values')))
                            ->where($db->quoteName('value_id'). ' IN (' . implode(',', $values). ')');

                        $db->setQuery($query);
                        $values = $db->loadObjectList('id');
                        ?>

Весь файл в приложении.
Помогите, пожалуйста.
*

sivers

  • Живу я здесь
  • 2453
  • 333 / 0
Re: Ошибка 1064 - You have an error in your SQL syntax
« Ответ #1 : 04.11.2019, 08:35:48 »
Код
 ->where($db->quoteName('attr_id'). ' IN (\'' . implode('\',\'', $attrs). '\')');
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

a-vikalingvo

  • Захожу иногда
  • 51
  • 7 / 0
Re: Ошибка 1064 - You have an error in your SQL syntax
« Ответ #2 : 04.11.2019, 09:12:19 »
Это -
Код: php
$query
                            ->select($db->quoteName(array('attr_id', 'name_ru-RU', 'description_ru-RU'), array('id', 'name', 'description')))
                            ->from($db->quoteName('#__jshopping_attr'))
[b]                            ->where($db->quoteName('attr_id'). ' IN (' . implode(',', $attrs). ')');[/b]

                        $db->setQuery($query);
                        $attrs = $db->loadObjectList('id');

меняем на это
Код: php
if( count( (array) $attrs ) )
{
$query->select( $db->quoteName( [ 'attr_id' , 'name_ru-RU' , 'description_ru-RU' ] , [ 'id' , 'name' , 'description' ] ) )
         ->from( $db->quoteName( '#__jshopping_attr' ) )
         ->where( $db->quoteName( 'attr_id' ). ' IN (' . implode( ',' , $attrs ). ')' );

$db->setQuery( $query );
$attrs = $db->loadObjectList( 'id' );
}#END IF
но тут еще по моему ошибка в коде в самом
переменная $attrs она же в условии запроса и в нее  же и полученные данные пишутся ....
Наверное так быть не должно !
*

a-vikalingvo

  • Захожу иногда
  • 51
  • 7 / 0
Re: Ошибка 1064 - You have an error in your SQL syntax
« Ответ #3 : 04.11.2019, 09:15:30 »
Код
 ->where($db->quoteName('attr_id'). ' IN (\'' . implode('\',\'', $attrs). '\')');
Та не - это я извиняюсь нее то по моему 
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Re: Ошибка 1064 - You have an error in your SQL syntax
« Ответ #4 : 04.11.2019, 11:21:18 »
Так попробуй
Код
<?php $query->select($db->quoteName(array('attr_id', 'name_ru-RU', 'description_ru-RU'), array('id', 'name', 'description')))
    ->from($db->quoteName('#__jshopping_attr'));
if($attrs) $query->where($db->quoteName('attr_id'). ' IN (' . implode(',', $attrs). ')');
*

a-vikalingvo

  • Захожу иногда
  • 51
  • 7 / 0
Re: Ошибка 1064 - You have an error in your SQL syntax
« Ответ #5 : 05.11.2019, 00:48:29 »
Цитировать
Так попробуй
Да не это неправильно - то он так выгрузит ему всю таблицу ...
если не будет $attrs - Вы же условие выборки просто закрыли - ошибки да не будет но и выберет все строки с таблицы тогда ! ))
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Ошибка при входе в корзину шаблон jmart

Автор dimiur

Ответов: 5
Просмотров: 2625
Последний ответ 24.05.2023, 14:24:30
от Gleb72
Ошибка шаблона yooutheme florence

Автор Agreton

Ответов: 4
Просмотров: 532
Последний ответ 27.10.2020, 21:01:18
от Agreton
Ошибка при переключении на русский язык

Автор Rebarun

Ответов: 4
Просмотров: 806
Последний ответ 18.05.2020, 15:09:57
от AlexB
Ошибка в определении устройства (десктоп - планшет)

Автор Алексей Лоскутов

Ответов: 5
Просмотров: 760
Последний ответ 23.11.2019, 13:36:12
от Алексей Лоскутов
Ошибка "500 JHtmlBehavior::mootools not found"

Автор Eevvggeennyy

Ответов: 50
Просмотров: 25827
Последний ответ 02.08.2019, 10:46:46
от b2z