MySQLi获取查询错误

问题描述:

当我使用MySQLi对我的php应用程序执行sql查询时,错误总是为空或为空,因此禁止我从日志记录或打印它们,这是相当令人沮丧的...我没有遇到任何插入,更新或者在查询不会引发错误时使用下面的代码段删除数据。MySQLi获取查询错误

我使用PHP 5.3.9在Zend服务器社区版5.6.0和mysqli的mysqlnd 5.0.8-dev的 - 20102224 - $修订:318113 $

这是执行我的查询代码:

... 
$this->last= $this->mysqli->query($sql); 
if (!$this->last) 
{ 
    print_r($this->mysqli); 

    var_dump($this->mysqli->error); 
    var_dump($this->mysqli->errno); 
    var_dump($this->mysqli); 
    $msg = 'Query failed [ ' . $this->mysqli->error . ' ]'; 

    $this->mysqli->rollback(); 
    throw new Exception($msg, ...); 
} 
... 

出于测试目的,我insterted一个在我的数据库名为“鲍勃”的城市,并试图插入另一个城市具有相同的名称,这是印什么:

mysqli Object 
(
    ... 
    [errno] => 1062 
    [error] => Duplicate entry 'bob' for key 'unq_city' 
    ... 
) 
string(0) "" 
int(0) 
object(mysqli)#6 (18) { 
    ... 
    ["errno"]=> 
    int(0) 
    ["error"]=> 
    string(0) "" 
    ... 
} 

^h如前所述,使用var_dump或访问我的mysqli对象的errno或错误是null。但是print_r显示了预期的错误!我在这里做错了什么?我之前从未使用mysqli,并且正在从oci8迁移,所以我希望这只是一个愚蠢的错误。


编辑:

我测试的旧服务器,PHP 5.3.8,5.5.0 ZSCE我的应用程序和mysqlnd 5.0.8-dev的 - 20102224 - $修订:310735 $具有相同从我可以告诉的配置。所有转储和打印都显示了整个mysqli数据,没有任何空白字段!

+1

,我认为是你必须报告一个bug,祝你好运! – ZiTAL 2012-03-17 17:20:52

你可以把这个输出?:

$tmp = array(); 
foreach($this->mysqli as $key => $value) 
    $tmp[$key] = $value; 
print_r($tmp); 
+2

打印的mysqli对象完全是空的,但在旧的服务器上它正常工作,所以我开始怀疑ZSCE或PHP上的错误。 – gxtaillon 2012-03-17 17:22:57