3

我正在拉这个头发。

在 ZF1 中这很容易,因为它会引发带有完整 sql 错误详细信息的异常。在 ZF2 中,它只引发 Exception\RuntimeException ,它只传递错误的描述,而不是导致无法使用的数字。

问题:如何从适配器中获取完整错误。这是我使用的代码片段:

$dbAdapter = $this->_serviceManaget->get('Zend\Db\Adapter\Adapter');

try {
    $result = $dbAdapter->query($sql, $binds);
} catch (\Exception $e) {
    //here I need to check the error number raised by MySQL during the execution
    //$e object in this case only contains 
    //$e->message = "Duplicate entry 'blablabla' for key 319" and $e->code = 0   
}

有什么建议么?

4

1 回答 1

2

在从 PHP SPL Exceptions扩展的 ZF2 Exceptions 中。它们都扩展了标准的异常接口。按照异常手册,您可以这样做:

try {
    $result = $dbAdapter->query($sql, $binds);
} catch (\Exception $e) {        
    $code = $e->getCode();
    $msg  = $e->getMessage();
    $file = $e->getFile();
    $line = $e->getLine();
    echo "$file:$line ERRNO:$code ERROR:$msg";       
}

仅供参考,您可以为不同的异常类型实现多个捕获,如下所示:

try {
    ...
} catch (\RuntimeException $e) {
    ...
} catch (\LogicException $e) {
    ...
}

更新:直接从实例
获取错误数据:\mysqli

try {
    $result = $dbAdapter->query($sql, $binds);
} catch (\Exception $e) {
    $mysqli = $dbAdapter->getDriver()->getConnection()->getResource();        
    $file = $e->getFile();
    $line = $e->getLine();
    echo "$file:$line ERRNO:$mysqli->errno ERROR:$mysqli->error";       
}

有关如何获取\mysqli错误和警告数据的更多信息,请查阅手册

于 2013-08-30T07:03:20.600 回答