getDbTable() - > select() - > where issue(Zend Framework 1.x)

时间:2014-08-28 14:47:59

标签: php mysql zend-framework

我目前正在Zend 1.x中准备一个查询。 select查询是在您期望的类中形成的:

我按如下方式设置查询:

    // prepare query
    $this->getDbTable()->select()
        ->setIntegrityCheck(false)
        ->from(array('mdt' => 'meta_data_type'))
        ->where('id = :id')
        ->bind(
            array(
                ':id' => $id
            )
        );
    // report SQL for debugging
    echo $this->getDbTable()->select()->__toString();

正如您所看到的,这不是最困难的查询。但是:返回的SQL如下:

SELECT `meta_data_type`.* FROM `meta_data_type`

任何人都可以告诉我如何调试这个问题吗?这对我来说似乎是正确的。 我试图在线跟踪这些例子,但是考虑到我们的系统方法(坐在Mapper模式中,其中包括非标准表格命名),这不是太多帮助。

仅供参考:它返回的实际数据与您对“完整数据集”的“获取行”操作的期望值相匹配,如下所示:第一行格式正确。它不受where子句的约束(正如你所期望的那样,它会从SQL中丢失!)。

仅供参考2:绑定/哪里不是问题。如果我把整个结局改为:

->where('id = 2');

它仍未在条款中显示。

1 个答案:

答案 0 :(得分:2)

您的查询看起来没问题,虽然这不是我以前用于ZF1的语法。但是,通过第二次呼叫$this->getDbTable()->select(),您将输出一个没有任何参数的新查询。

最简单的修复方法是将其分配给变量:

// prepare query
$select = $this->getDbTable()->select()
               ->setIntegrityCheck(false)
               ->from(array('mdt' => 'meta_data_type'))
               ->where('id = :id')
               ->bind(
                    array(
                        ':id' => $id
                    )
                );

// report SQL for debugging
echo $select;