【发布时间】:2015-10-15 08:36:40
【问题描述】:
我正在尝试为 mysqli 错误定义一个自定义错误处理程序。关注我的数据库单例:
<?php
class Database extends mysqli
{
private static $instance;
public function __construct($host, $user, $password, $database)
{
set_error_handler('self::error', MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
parent::__construct($host, $user, $password, $database);
}
public static function instance()
{
if (self::$instance === null) {
self::$instance = new self('example', 'example', 'example', 'example');
}
return self::$instance;
}
public static function error()
{
echo 'database error';
error_log('...');
exit();
}
}
尝试以下代码我在屏幕上没有看到“数据库错误”,并且错误日志文件中没有三个点:
<?php
include 'database.singleton.php';
$query = Database::instance()->prepare('wrong query');
$query->bind_param('si', $test, $test);
$query->execute();
$query->close();
相反,错误日志文件中有消息Fatal error: Uncaught exception 'BadMethodCallException' with message 'Call to a member function bind_param() on a non-object (boolean)。错误是真的,因为查询是故意错的,所以$query是假的,但是我想用Database::error()处理所有mysqli错误。我尝试将set_error_handler('self::error', MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 替换为set_error_handler('self::error'); 和set_error_handler('self::error()');,但我看不出有任何区别。我该如何解决?
【问题讨论】: