【问题标题】:Zend_Db query Mysqli prepare error: Operand should contain 1 column(s)Zend_Db 查询 Mysqli 准备错误:操作数应包含 1 列
【发布时间】:2010-11-19 09:12:42
【问题描述】:

我的查询在 phpmyadmin 中有效,但在 Zend_db 中无效。您可以在SQL statement with several joins中阅读有关查询的信息

我有这些表

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 知识有些有限,我不知道我做错了什么还是确实是一个错误。你能帮我解决这个问题吗? 坦克你。

【问题讨论】:

标签: mysql zend-framework pdo zend-db


【解决方案1】:

代替

parent::fetchAll($query);

使用

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

【讨论】:

  • 正确。 Table fetchAll() 方法与 Adapter fetchAll() 方法不同。后者采用完整的 SQL 语句。前者采用 SQL 表达式以在 WHERE 子句中使用,或者采用 Zend_Db_Table_Select 类型的对象。
  • 谢谢,如果没有你的帮助,我想我永远无法解决这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 2013-10-04
  • 1970-01-01
相关资源
最近更新 更多