我应该检查pdo php中执行操作的返回值

时间:2014-09-24 19:11:56

标签: php mysql pdo

我一直在研究注册系统。与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没有抛出异常?我应该检查它们,还是我是偏执狂?

1 个答案:

答案 0 :(得分:1)

答案是肯定的。

如果您尝试执行完全不可能的操作(即使用不正确的主机名连接到数据库,使用不正确的用户名或密码进行身份验证等),则会引发PDOException。但是,如果SQL中只有语法错误或未定义的引用,PDOStatement::execute将以静默方式返回false。如果要检查这些错误并回滚更改,您当然应确保execute返回true。

但是,您可以change this behavior代替此,以便SQL错误显示为例外:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

然后,代码中的单个catch语句就足够了。