gpt4 book ai didi

php - PDO 异常问题 - 如何捕捉它们

转载 作者:IT王子 更新时间:2023-10-29 00:12:11 25 4
gpt4 key购买 nike

我正在使用 PDO 为数据库重写网站界面。我曾经使用 mysql 扩展,但我从来没有为错误处理而烦恼,我有的几个错误处理程序基本上都是复制粘贴。

现在我想正确地做到这一点。但是,我在捕获错误时遇到了问题(MySQL 中的“重复条目”、“空值”等错误)。我的语句有多少需要放在 try block 中?所有的东西都应该在那里吗?我正在使用 Include() 连接到我的数据库(它有自己的错误处理),所以只有查询执行在这段代码中有错误。我不明白为什么它在执行以下代码时没有捕获到错误:

try {
$stmt = $db->prepare("INSERT INTO tbl_user (id, name, password, question, answer) VALUES (NULL, :name, :password, :question, :answer)");
$stmt->bindValue(":name", $_POST['name']);
$stmt->bindValue(":password", $_POST['password']);
$stmt->bindValue(":question", $_POST['question']);
$stmt->bindValue(":answer", $_POST['answer']);
$stmt->execute();
echo "Successfully added the new user " . $_POST['name'];
} catch (PDOException $e) {
echo "The user could not be added.<br>".$e->getMessage();
}

所以我的问题是:所有这些都必须在 try block 中吗?我可以将执行放在 try block 中吗?它应该捕获错误 Duplicate value "John"in key "name",但会显示成功消息。 (当试图添加两个“John”用户时)。我检查了 PHPMyAdmin;索引是唯一的并且确实按预期抛出错误,只是没有使用此代码。

最佳答案

你应该看看文档。但是如果你没有找到任何东西,你可以添加另一个捕获:

<?php
try {
$stmt = $db->prepare("INSERT INTO tbl_user (id, name, password, question, answer) VALUES (NULL, :name, :password, :question, :answer)");
$stmt->bindValue(":name", $_POST['name']);
$stmt->bindValue(":password", $_POST['password']);
$stmt->bindValue(":question", $_POST['question']);
$stmt->bindValue(":answer", $_POST['answer']);
$stmt->execute();
echo "Successfully added the new user " . $_POST['name'];
} catch (PDOException $e) {
echo "DataBase Error: The user could not be added.<br>".$e->getMessage();
} catch (Exception $e) {
echo "General Error: The user could not be added.<br>".$e->getMessage();
}
?>

这必须有效,因为 PHP 插件的所有异常都继承自 Exception native PHP 类。 (如果我没记错的话,从 5.0 开始)。

关于php - PDO 异常问题 - 如何捕捉它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11102644/

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