Использование модуля Joomla и получение ошибки «Нет действительного подключения к базе данных. У вас> ошибка в синтаксисе SQL» - PullRequest
0 голосов
/ 15 декабря 2010

Я использую модуль Joomla (ArogaRousel), который был создан для отображения изображений другого модуля (AdsManager), и модуль отображает следующую ошибку:

Нет действительного соединения с базой данных У вас есть ошибкав вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с ')) ORDER BY просмотры DESC, id LIMIT 0, 9' в строке 1 SQL = SELECT *, concat ('/ images / com_adsmanager / ads /', id, 'a.jpg') как imgUrl ОТ root_adsmanager_ads, root_adsmanager_adcat как ac ГДЕ опубликовано = 1 AND (ac.adid = id и ac.catid IN ()) ORDER BY просмотров DESC, id LIMIT 0, 9

Я не опытный в MySQL, но я нашел файл, где выполняется запрос.

Это код, где выполняется запрос

$query = "SELECT *,concat('/images/com_adsmanager/ads/',id,'a.jpg') as imgUrl FROM #__adsmanager_ads "
     . $table
     . " WHERE published=1 "
     . $where
     . $ordering
     . $limit;

Может ли кто-нибудь из вас, о знающие люди, указать ошибку и решение?

В ответ на Bemace здесь я добавляю целую функцию

// Get list of banners
function getAds(&$paramslist){

    $where = array();
    if ($paramslist['ads'] != '') $where[] = 'id IN (' . modArogarouselAdsmanagerHelper::cleanIds($paramslist['ads']) . ')';

    if ($paramslist['categories'] != '') {
        $where[] = 'ac.adid=id and ac.catid IN (' . modArogarouselAdsmanagerHelper::cleanIds($paramslist['categories']) . ')';
        $table = ' , #__adsmanager_adcat as ac';
        }


    $where = (count($where) > 0) ? ' AND (' . implode(' OR ', $where) . ')' : '';

    if ($paramslist['ordering'] == 1) {
        $ordering = ' ORDER BY views DESC, id';
    } else if ($paramslist['ordering'] == 2) {
        $ordering = ' ORDER BY views ASC';
    } else if ($paramslist['ordering'] == 3) {
        $ordering = ' ORDER BY id';
    } else if ($paramslist['ordering'] == 4) {
        $ordering = ' ORDER BY RAND()';
    }

    $limit = ($paramslist['limit'] != '') ? ' LIMIT 0, ' . ($paramslist['limit']) : '';

    $query = "SELECT *,concat('/images/com_adsmanager/ads/',id,'a.jpg') as imgUrl FROM #__adsmanager_ads "
             . $table
             . " WHERE published=1 "
             . $where
             . $ordering
             . $limit;
    $db = &JFactory::getDBO();
    $db->setQuery($query);
    $adslist = $db->loadObjectList();
    $adslist = ($paramslist['mode_dir'] == 'bottom') ? array_reverse($adslist, true) : $adslist;
    //print_r($adslist);
    return $adslist;
}

1 Ответ

2 голосов
/ 15 декабря 2010

Пустое IN () прямо перед ORDER BY является проблемой.Вам нужно будет проверить код, который устанавливает переменную $where.Похоже, ожидается, что будет выбрана хотя бы одна категория, но ни одна из них не была выбрана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...