我在程序 MySQL 之后开始使用 OO-MySQLi,但我遇到了问题。
在生产环境中,我的系统将所有错误显示为自定义页面。MySQLi 错误也是一个“错误”,我想抓住它们,但在文档中只描述了一种方法:
if (!$mysqli->query("SET a=1")) {
exit('An error occurred: ' . $mysqli->error);
}
(仅举例)。这是一个非常糟糕的方法,因为在我的系统中,当错误发生时我正在做很多事情,比如日志记录、调用事件等。
当然,我可以扩展 mysqli 类,例如:
class myMysqli {
public function __construct(/* ... */)
{
parent::__construct(/* ... */);
}
public function query(/* .. */)
{
parent::query(/* ... */);
if($this->errno !== 0)
{
// An error occurred
}
}
}
$mysqli = new myMysqli(/* ... */);
$mysqli->query(/* ... */);
但是这样我需要扩展几乎所有可能发生错误的方法。此外,MySQLi 提供了有其自身错误的准备好的语句(mysqli_stmt 类)!
你能知道处理 MySQLi 错误的更好方法吗?先感谢您。
添加
关于例外:我是否正确理解,有例外我需要做这样的事情:
try {
$mysqli->query(/* ... */);
} catch (Exception $e) {
// An error occurred
}
但这类似于
if(!$mysqli->query(/* ... */))
{
// An error occured
}
有什么区别?