【问题标题】:How to tell when query executed successfully in PHP PDO? [duplicate]如何判断查询何时在 PHP PDO 中成功执行? [复制]
【发布时间】:2012-03-20 05:51:11
【问题描述】:

如何测试以下查询是否成功执行?

$STH = $this->_db->prepare("UPDATE UserCreds SET
    VerificationString=:newVerificationString, ExpiryDate=:expiryDate 
    WHERE UserID = :userID;");
$STH->execute($params);

我知道我可以在添加新行时使用 lastInsertId(),但是 UPDATE 和 SELECT 呢?

【问题讨论】:

  • @Pekka 不,我可以很好地收到错误消息。
  • de.php.net/manual/en/pdostatement.execute.php 说:成功返回 TRUE,失败返回 FALSE。 - 所以将它绑定到一个变量,例如$success = $STH->execute($params); 并对照 truefalse 检查该变量。

标签: php mysql pdo


【解决方案1】:

execute 在成功时返回 true,在失败时返回 false

From Docs:

成功时返回 TRUE,失败时返回 FALSE。


因此您可以确保查询成功运行,例如:

if ($STH->execute($params))
{
  // success
}
else
{
  // failure
}

【讨论】:

  • 类似if($STH->execute($params)) { echo "Success!"; } else { echo "Failure!"; } ?
  • @DjangoReinhardt:是的,你是对的 :) 如果你以后需要使用它,你也可以将 execute 的结果存储在一个变量中。
  • 非常适合检查(技术)成功。使用rowCount() 检查UPDATE 中是否有任何更改(mysql 驱动程序还会告诉您SELECT 中有多少行,但这不应该依赖)。
  • 如果你测试类型它不起作用。例如。 if( $STH->execute($params) === true ) 每次都会失败。至少在执行 if 以创建新的 mysql 用户时。成功返回 int(0),失败返回 null。这是为什么呢?
  • 如何获得错误消息以帮助找出失败的原因?
【解决方案2】:

execute() 根据查询的成功/失败返回真/假:

$status = $STH->execute($params);

if ($status) {
   echo 'It worked!';
} else {
   echo 'It failed!';
}

注意:不返回任何行的选择查询不是失败。这是一个完全有效的结果,只是碰巧没有结果。

【讨论】:

    【解决方案3】:

    我可以简单地计算受影响的行数:

    $stmt->execute();
    $count = $stmt->rowCount();
    
    if($count =='0'){
        echo "Failed !";
    }
    else{
        echo "Success !";
    }
    

    【讨论】:

    • 这仅在使用 UPDATE 时有效
    • 是的,这是 UPDATE 的,看看询问的查询,它看起来是关于 UPDATE 的
    • 该问题明确指出:“UPDATE 和 SELECT 怎么样?”
    【解决方案4】:

    这是验证 Doctrine 查询结果返回成功或失败的最佳方法 结果和上述相同的方式建议检查天气查询 返回 True 时成功False 时失败

        public static function removeStudent($teacher_id){
            $q = Doctrine_Query::create()
                ->delete('Student s')
                ->where('s.teacher_id = ?');
    
            $result = $q->execute(array($teacher_id));
    
            if($result)
            {
             echo "success";
            }else{
             echo "failed";
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-02
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      相关资源
      最近更新 更多