使用PDO,如何确保UPDATE语句成功?

时间:2012-08-05 23:16:08

标签: php mysql

对于INSERT语句,似乎可以使用if (isset($connect->lastInsertId()))来检查INSERT语句是否成功。 (如果我错了,请纠正我。)

但对于UPDATE语句,我怎么知道它是否成功?

例如,我有一个基本的:

$statement=$connect->prepare("UPDATE users SET premium='1' WHERE userid=?");
$statement->execute(array($id));

提前多多感谢。此致

2 个答案:

答案 0 :(得分:23)

这取决于你对“成功”的意思。如果您的意思是在没有失败的情况下执行查询,那么PDO将在失败时抛出异常或从FALSE返回PDOStatement::execute(),具体取决于您设置的错误模式,因此“成功“在这种情况下查询只是一个执行方法没有返回FALSE或抛出异常的查询。

如果您的意思是“成功”,实际上已经更新了行(而不是仅更新了0行),那么您需要使用PDOStatement::rowCount()进行检查,这将告诉您受影响的行数以前的查询。

警告:对于newvalue = oldvalue PDOStatement::rowCount()返回零的更新。你可以使用

  

$p = new PDO($dsn, $u, $p, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));

以禁用此意外行为。

答案 1 :(得分:3)

$stmt->execute();
$count = $stmt->rowCount();

if($count =='0'){
    echo "Failed !";
}
else{
    echo "Success !";
}