gpt4 book ai didi

php - 如何捕获 MySQLi (PHP) 中的错误并继续执行?

转载 作者:行者123 更新时间:2023-11-29 08:02:04 24 4
gpt4 key购买 nike

我有以下类(class):

    <?php
require 'config.php';
ini_set('display_errors', 0);

abstract class Conexion {

protected $conexion;

function __construct() {

}

function __destruct() {
// $this->close();
}

protected function abrirConexion() {
try {
$this->conexion = new mysqli(BD_HOST, BD_USUARIO, BD_CLAVE, BD_BASEDEDATOS, BD_PUERTO, BD_SOCKET);
if ($this->conexion->errno == 0) {
$this->conexion->query("SET NAMES utf8");
return true;
} else {
$this->cerrarConexion();
return false;
}
} catch (Exception $e) {
return false;
}
}

protected function cerrarConexion() {
$this->conexion->close();
}

}

我想捕获脚本执行过程中可能发生的错误和异常(确切地说是与数据库的连接),如果一切顺利则返回 true,否则返回 false。但我无法捕获连接错误(例如,当生成太多连接时,脚本会停止并且不会返回 false)。我读到了有关 set_handler_error 的内容,但我不知道如何实现它。

有人可以帮助我吗?

最佳答案

连接后无法检查$conn->errno,有一个特殊属性$conn->connect_errno为此。

同样在 PHP 中,当您不希望生成任何错误或警告时(例如,因为您不关心,或者因为您像在您的情况下一样自己处理它们),您应该使用 the @ error control operator .

所以它看起来像这样:

$this->conexion = @new mysqli(BD_HOST, BD_USUARIO, ...);
if ($this->conexion->connect_errno == 0) {
...

但这意味着您自己进行检查并且根本没有使用异常!这是经典的显式错误处理。

<小时/>

现在让我们看看如何使其能够处理您想要的异常。解决方案是正确设置 mysqli 错误报告模式:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

the documentation 中所述,这使得 mysqli “抛出 mysqli_sql_exception 错误而不是警告”。那么您不需要 @ 运算符,也不需要检查 errno 值:

    function abrirConexion() {
// This needs to be set just once.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

try {
$this->conexion = new mysqli(...);
$this->conexion->query("SET NAMES utf8");
return true;
} catch (Exception $e) {
return false;
}
}

简单干净。

关于php - 如何捕获 MySQLi (PHP) 中的错误并继续执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23553124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com