Ошибка подготовки запроса Zend_Db Mysqli: операнд должен содержать 1 столбец (столбцы)

У меня проблема с запросом, который работает в phpmyadmin, но не в Zend_db. Вы можете прочитать о запросе в операторе SQL с несколькими соединениями.

у меня есть эти таблицы

Post
    ID
    entry
Category
    ID
    name
CategoryBinding
    ID
    postID
    categoryID

И это мой php-код:

    class Blog_Model_DbTable_Posts extends Zend_Db_Table
    {
        protected $_name = 'Posts';
    public function getByCategoryId($id)
    {
            $query = 
    "SELECT * 
FROM `Post` AS `p` 
LEFT JOIN `CategoryBinding` AS `cb` ON p.ID = cb.postID 
LEFT JOIN `Category` AS `c` ON cb.categoryID = c.ID
INNER JOIN `Post` AS `p2` ON p.id = p2.id
WHERE p.id in
(
    SELECT p2.id
        FROM `Post` as `p2`
        LEFT JOIN `CategoryBinding` AS `cb` ON p2.ID = cb.postID 
        LEFT JOIN `Category` AS `c` ON cb.categoryID = c.ID
        WHERE c.id = 1
    )
    "
return parent::fetchAll($query);

Я попытался запустить этот запрос с помощью адоптанта PDO и адоптера mysqli. Я получаю эту ошибку с усыновителем mysqli.

Mysqli prepare error: Operand should contain 1 column(s)

Я погуглил об этом и обнаружил, что это, возможно, ошибка в Zend_Db, но, поскольку мои знания sql несколько ограничены, я не знаю, делаю ли я что-то неправильно или это действительно ошибка. Не могли бы вы помочь мне понять это? Спасибо.


person unkownt    schedule 13.08.2009    source источник
comment
Какую версию Zend вы используете? Быстрый поиск показывает, что в 1.5–1.8 существует ошибка, которая может быть связана с framework.zend. .com/issues/browse/ZF-3311   -  person Brandon    schedule 13.08.2009
comment
Я использую 1.9 (самая новая версия)   -  person unkownt    schedule 13.08.2009


Ответы (1)


Вместо

parent::fetchAll($query);

Использовать

$this->getAdapter()->fetchAll($query);
person Mark    schedule 13.08.2009
comment
Правильный. Метод таблицы fetchAll() отличается от метода адаптера fetchAll(). Последний принимает полный оператор SQL. Первый принимает либо выражение SQL для использования в предложении WHERE, либо объект типа Zend_Db_Table_Select. - person Bill Karwin; 13.08.2009
comment
Спасибо, я не думаю, что когда-либо смог бы решить эту проблему без вашей помощи. - person unkownt; 14.08.2009