我正在使用 PDO 为数据库重写网站界面。我曾经使用 mysql 扩展,但我从来没有为错误处理而烦恼,我拥有的少数错误处理程序基本上是复制粘贴。
现在我想正确地做到这一点。但是,我在捕捉我想要的错误时遇到了问题(MySQL 中的“重复条目”、“空值”等错误)。有多少我的语句需要在 try 块中?所有的东西都应该在那里吗?我正在使用 anInclude()
连接到我的数据库(它有自己的错误处理),所以只有查询执行在这段代码中有错误。我无法弄清楚为什么在执行以下代码时它没有捕获错误:
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 块中吗?我可以将执行放在 try 块中吗?它应该捕获错误Duplicate value "John" in key "name"
,但会显示成功消息。(尝试添加两个“John”用户时)。我检查了 PHPMyAdmin;该索引是唯一的,并且会按预期抛出错误,只是不使用此代码。