Zend Framework中的“SQLSTATE [HY000]:常规错误”

时间:2011-04-05 22:14:34

标签: mysql zend-framework zend-db

我已经在Zend Framework工作了一年多了,但我从未遇到过这个问题。 我正在我的本地机器上运行PHP 5.2,Zend Framework 1.11.4和MySQL 5.这都是在Ubuntu 10.04上运行Apache 2

我的代码正在尝试向数据库添加权限记录。这是我的代码:

protected function _add($resource, $description)
{
    $this->_sql = 'INSERT INTO Permissions (id, resource, description)
                    VALUES (NULL, :resource, :description)';
    $this->_params = array(
            ':resource' => $resource,
            ':description' => $description
    );
    $this->_query = $this->_db->prepare($this->_sql);
    $this->_query->execute($this->_params);
    $this->_result = $this->_query->fetchAll();
    if(count($this->_result) != 1) {
        return false;
    }
    return $this->_result[0];
}

例外情况发生在“$ this-> _result = $ this-> _query-> fetchAll();”行上并且返回的消息只是“SQLSTATE [HY000]:一般错误”。而已。没有错误号或任何东西。只是一般错误。 但是,当我检查Permissions表时,记录已成功添加。 WTF?

我一直在谷歌搜索答案,但我找不到任何解决问题的方法。 有什么想法吗?

2 个答案:

答案 0 :(得分:4)

$this->_result = $this->_db->lastInsertId();

而不是

$this->_result = $this->_query->fetchAll();
我应该早点发现那个。

答案 1 :(得分:3)

id是你的PK?许多RDBMS不允许NULL用于PK,因此这个必须失败。

更新: 我明白了,mySQL允许NULL使用PK AI。但是,我会省略它。 ;)

此外,我看到它的INSERT - 声明,这样的事情(afair)不会返回任何内容。也许(只是一个猜测;))你正在寻找last inserted ID