我一直在研究注册系统。与数据库交互的数据非常敏感,所以我试图格外注意细节。 这是我如何插入的示例。
try{
$query="INSERT INTO account (user_id,password,salt) VALUES (:user_id,:password,:salt)";
$stmt=$db->prepare($query);
$params=array(':user_id'=>$userId,':password'=>$password,':salt'=>$salt);
$result=$stmt->execute($params);
if(!$result){
$db->rollBack();
doStaff();
}
}
catch(PDOException $e){
$db->rollBack();
doStaff();
}
我想知道是否存在执行操作的结果返回 false 但 pdo 不抛出异常的情况?我应该检查它们,还是我偏执?
最佳答案
答案是肯定的。
如果您尝试做一些完全不可能的事情(即使用不正确的主机名连接到数据库,使用不正确的用户名或密码进行身份验证等),将引发 PDOException。但是,如果您的 SQL 中仅存在语法错误或 undefined reference ,PDOStatement::execute会默默地返回 false。如果您想检查这些错误并回滚更改,您一定要确保 execute
返回 true。
但是,您可以 change this behavior 而不是这个以便 SQL 错误显示为异常:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
然后,您的代码中的单个 catch 语句就足够了。
关于php - 我应该检查 pdo php 中执行操作的返回值吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26024658/