我一直在研究注册系统。与db交互的数据非常敏感,所以我试图特别关注细节。 这是我如何插入的一个例子。
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没有抛出异常?我应该检查它们,还是我是偏执狂?
答案 0 :(得分:1)
答案是肯定的。
如果您尝试执行完全不可能的操作(即使用不正确的主机名连接到数据库,使用不正确的用户名或密码进行身份验证等),则会引发PDOException。但是,如果SQL中只有语法错误或未定义的引用,PDOStatement::execute将以静默方式返回false。如果要检查这些错误并回滚更改,您当然应确保execute
返回true。
但是,您可以change this behavior代替此,以便SQL错误显示为例外:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
然后,代码中的单个catch语句就足够了。