2009-08-13 53 views
2

我有一个在phpmyadmin中工作但不在Zend_db中工作的查询有问题。您可以在SQL statement with several joinsZend_Db查询Mysqli准备错误:操作数应该包含1列

阅读有关查询我有这些表

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); 

我试图与boath的PDO收养并运行此查询与mysqli采用者。我在mysqli收养者身上发现了这个错误。

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

我用Google搜索一下,发现它可能是在Zend_Db的一个bug,但因为我的SQL知识是比较有限的,我不知道如果我做错了什么,如果它确实是一个错误。你能帮我解释一下吗? 坦克你。

+0

您使用Zend的哪个版本?快速搜索表明,可能相关的错误确实存在于1.5 - 1.8 http://framework.zend.com/issues/browse/ZF-3311 – Brandon 2009-08-13 17:00:36

+0

我正在使用1.9(最新版本) – unkownt 2009-08-13 17:01:33

回答

4

而不是

parent::fetchAll($query); 

使用

$this->getAdapter()->fetchAll($query); 
+1

正确。 Table'fetchAll()'方法与Adapter'fetchAll()'方法不同。后者采用完整的SQL语句。前者可以使用SQL表达式在WHERE子句中使用,或者使用Zend_Db_Table_Select类型的对象。 – 2009-08-13 19:25:24

+0

谢谢,如果没有你的帮助,我不认为我能够解决这个问题。 – unkownt 2009-08-13 23:10:06

相关问题