📜  pdo mysqli 错误处理 - PHP (1)

📅  最后修改于: 2023-12-03 15:33:26.497000             🧑  作者: Mango

PDO 和 MySQLi 错误处理

在 PHP 中,PDO 和 MySQLi 都是常用的数据库扩展。当与数据库进行通信时,可能会出现一些错误,因此错误处理是重要的一部分。下面将介绍如何在 PDO 和 MySQLi 中处理错误。

PDO 错误处理
基本错误处理

在使用 PDO 进行数据库操作时,可能会发生一些错误,比如 SQL 语句写错、连接数据库失败等。为了捕获和处理这些错误,可以使用 try-catch 语句。示例代码如下:

try {
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'password');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $pdo->query('SELECT * FROM users');
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

在上面的例子中,new PDO() 语句可能会抛出 PDOException 异常。如果出现异常,程序将跳转到 catch 块,输出错误信息。

更详细的错误信息

除了输出错误信息外,还可以获取更详细的错误信息,比如错误的代码行数和堆栈跟踪信息。可以使用以下代码获取:

try {
    // ...
} catch (PDOException $e) {
    echo "Error occurred on line " . $e->getLine() . " in " . $e->getFile() . ": " . $e->getMessage() . "<br>";
    echo $e->getTraceAsString();
}
抛出错误

可以使用 PDOException 异常来抛出自定义错误信息。示例代码如下:

try {
    // ...
    if (!$result) {
        throw new PDOException("Query failed!");
    }
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}
MySQLi 错误处理
基本错误处理

在 MySQLi 中,可以使用 mysqli_connect_error()mysqli_connect_errno() 函数来处理连接错误。示例代码如下:

$conn = mysqli_connect('localhost', 'root', 'password', 'test');
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$sql = "SELECT * FROM users";
$result = mysqli_query($conn, $sql);
if (!$result) {
    die("Query failed: " . mysqli_error($conn));
}

mysqli_close($conn);

在上面的例子中,如果连接或查询失败,会输出错误信息并结束脚本。

更详细的错误信息

和 PDO 一样,MySQLi 也可以获取更详细的错误信息。示例代码如下:

$conn = mysqli_connect('localhost', 'root', 'password', 'test');
if (mysqli_connect_errno()) {
    die("Connection failed: " . mysqli_connect_error());
}

$sql = "SELECT * FROM users";
$result = mysqli_query($conn, $sql);
if (!$result) {
    die("Query failed: " . mysqli_error($conn) . "<br>" . mysqli_errno($conn));
}

mysqli_close($conn);

在上面的例子中,如果连接或查询失败,会输出错误信息、错误代码和错误行数,便于调试错误。

抛出错误

和 PDO 一样,MySQLi 也可以使用 mysqli_sql_exception 抛出自定义的异常以及获取更详细的错误信息。示例代码如下:

try {
    $conn = mysqli_connect('localhost', 'root', 'password', 'test');
    if (mysqli_connect_errno()) {
        throw new mysqli_sql_exception(mysqli_connect_error(), mysqli_connect_errno());
    }

    $sql = "SELECT * FROM users";
    $result = mysqli_query($conn, $sql);
    if (!$result) {
        throw new mysqli_sql_exception(mysqli_error($conn), mysqli_errno($conn));
    }

    mysqli_close($conn);
} catch (mysqli_sql_exception $e) {
    echo "Error occurred on line " . $e->getLine() . " in " . $e->getFile() . ": " . $e->getMessage() . "<br>";
    echo $e->getTraceAsString();
}
总结

错误处理是编写健壮的代码所必需的一部分。在处理数据库时,我们必须谨慎并对错误情况进行处理,以便程序可以正常运行并且错误可以及时得到修复。无论是使用 PDO 还是 MySQLi,都可以使用类似的方式来处理错误。