Php 有没有办法将事件处理函数附加到mysql错误?
目前,我处理mysql错误的最佳方法是在每个mysql语句之后添加以下内容:Php 有没有办法将事件处理函数附加到mysql错误?,php,mysql,mysqli,Php,Mysql,Mysqli,目前,我处理mysql错误的最佳方法是在每个mysql语句之后添加以下内容: if($mysqli->error) errorhandlingfunction(); 是否有一种方法可以为mysql错误创建一种类型的处理程序,并在每次出现错误时分配一个函数,而不必每次手动检查?创建一个新类,扩展mysqli,并在错误发生时引发异常: /* Create custom exception classes */ class ConnectException extends Exception
if($mysqli->error)
errorhandlingfunction();
是否有一种方法可以为mysql错误创建一种类型的处理程序,并在每次出现错误时分配一个函数,而不必每次手动检查?创建一个新类,扩展
mysqli
,并在错误发生时引发异常:
/* Create custom exception classes */
class ConnectException extends Exception {}
class QueryException extends Exception {}
class Mysqlie extends mysqli
{
function __construct()
{
parent::init();
if (!parent::options(MYSQLI_INIT_COMMAND, 'set session sql_mode="strict_all_tables";')) {
throw new ConnectException("Cannot set MySQL options");
}
$args = func_get_args();
$result = call_user_func_array("parent::real_connect", $args);
/* Pass all arguments passed to the constructor on to the parent's constructor */
if (!$result) {
throw new ConnectException('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
}
}
function query($query)
{
$result = parent::query($query);
if(mysqli_error($this)){
throw new QueryException(mysqli_error($this), mysqli_errno($this));
}
return $result;
}
}
然后您的代码变成:
try {
$conn = new mysqlie(...connection parameters...);
$result = $conn->query("MyQuery");
// do lots more stuff here
// including more queries
$result = $conn->query("MyNextQuery");
// finally close...
$conn->close();
} catch (ConnectException $e)) {
die("Can't connect to database".$e->getMessage());
} catch (QueryException $e) {
die("Query error:".$e->getMessage());
}
try
块的内容显然要大得多,并且包含多个查询。可能重复如何添加函数以捕获参数化语句?进一步扩展该类以包括覆盖父方法的prepare
、bind
和execute
方法。添加与我在这里添加的异常类似的新异常(可能是ExecuteException)。捕获类中的任何错误并抛出一个新异常。您可以根据需要添加任意数量的catch
块,每个块捕获不同的异常。