ZF:查询错误SQLSTATE [HY093]

时间:2011-03-14 08:22:22

标签: php zend-framework pdo fetch

我对此功能有错误:

public function getCountCategoryByUrl($url, $root = 0)
{
    $url = strtolower($url);


    $select = $this->select()
                   ->from($this->_name, array('count(*) as cnt'))
                   ->where("LOWER(catalog_url) LIKE :url " . ($root > 0 ? " AND `type` = :type" : ""));

    return $this->getAdapter()->fetchOne($select, array('url' => $url, 'type' => $root));
}

错误:

Message: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens 

我做错了什么?

2 个答案:

答案 0 :(得分:1)

当你有$root <= 0时会出现问题。在这种情况下,当您绑定两个变量(:url :url)时,您的SQL语句只包含一个标记(:type)。

您必须有条件地设置绑定参数:

$select = $this->select()
               ->from($this->_name, array('count(*) as cnt'))
               ->where("LOWER(catalog_url) LIKE :url ");
$params = array(':url' => $url);
if ($root > 0) {
    $select->where("`type` = :type");
    $params[':type'] = $root;
}

return $this->getAdapter()->fetchOne($select, $params);

编辑:我忽略了一些非常重要的事情。必须使用SQL语句中定义的相同标记绑定变量。这意味着您必须使用:url:type作为绑定变量(不是urltype)。

答案 1 :(得分:0)

否则,您可以die($select)查看生成的SQL语句。