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

标签 php mysql pdo

我一直在研究注册系统。与数据库交互的数据非常敏感,所以我试图格外注意细节。 这是我如何插入的示例。

    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/

相关文章:

php - 在当前命名空间之前的命名空间

php - 如何从 try catch 语句中回显我的结果

php - Uncaught Error : Cannot use object of type WP_Post as array

php - 如何在 Laravel 中同步同一个属性的多个值?

PHP PDO 和 MySQL AGAINST() 函数

php - Phalcon pdo 异常模型优先

php - 每月自动插入数据库

php - 如何在mysql中检索带有发送者和接收者用户名的聊天消息

mysql - 自动启动XAMPP版本7.1.4

php - 如何将 PDO 语句动态添加到数组中?