📅  最后修改于: 2023-12-03 15:33:26.497000             🧑  作者: Mango
在 PHP 中,PDO 和 MySQLi 都是常用的数据库扩展。当与数据库进行通信时,可能会出现一些错误,因此错误处理是重要的一部分。下面将介绍如何在 PDO 和 MySQLi 中处理错误。
在使用 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_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,都可以使用类似的方式来处理错误。