ZF: ошибка запроса SQLSTATE [HY093] - PullRequest
0 голосов
/ 14 марта 2011

У меня есть ошибка в этой функции:

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 ]

1 голос
/ 14 марта 2011

Проблема возникает, когда у вас есть $root <= 0.В этом случае ваш оператор SQL содержит только один токен (:url), а вы связываете две переменные (:url и :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 для связанных переменных (не url и type).

0 голосов
/ 14 марта 2011

Иначе, вы можете сделать die($select), чтобы посмотреть, какой оператор SQL генерируется.

...