Проблема со сложным sql-запросом

Рейтинг: 0Ответов: 1Опубликовано: 03.04.2015

Здравствуйте! Функция получает параметр через адресную строку и делает выборку из БД. Если запрос ввожу с конкретными цифрами в phpmyadmin, то запрос выводит то, что нужно. А функция возвращает пустой массив:

function article_block($category){
    try {
        $dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8', HOST, DB);
        $pdo = new PDO($dsn, USER, PASS);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch (PDOException $e) {
        echo "<p>Запрос на выборку данных из бызы не прошёл. Напишите об этом администратору <a href='mailto:admin@torawhite.ru'>admin@torawhite.ru</a>.</p><br>ERROR: " . $e->getMessage();
        exit;
    }

    $sql = '(SELECT article_id, article_cat_id, article_par_id, article_title, article_img, article_author, article_author_card, article_description, article_date, article_views FROM articles WHERE article_cat_id = :cat)
            UNION
            (SELECT article_id, article_cat_id, article_par_id, article_title, article_img, article_author, article_author_card, article_description, article_date, article_views FROM articles WHERE article_cat_id IN
            (
                SELECT cat_id FROM magazine_left_sidebar WHERE parent_id = :cat
            ))';


    $data = $pdo->prepare($sql);
    $data->bindValue (':cat', $category);
    $data->execute();
    $article_block = $data->fetchAll(PDO::FETCH_ASSOC);
    return $article_block;
}

Не могу понять, в чём дело...

Ответы

▲ 1

Из документации:

" Вы должны подбирать уникальные имена псевдопеременных для каждого значение, которое необходимо передавать в запрос при вызове PDOStatement::execute(). "Нельзя использовать одну псевдопеременную в запросе больше одного раза, если только не включен режим эмуляции.

Замечание: Маркеры параметров представляют из себя только непосредственно данные. Ни часть данных, ни специальные слова, ни идентификаторы, никакая другая часть запроса не могут быть переданы через параметры. Например, вы не можете привязать несколько значений к одному параметру для SQL выражения IN()."