24

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

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

例如,我有一个这样的基本:

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

提前非常感谢。问候

4

2 回答 2

34

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

如果您的意思是“成功”,因为实际上更新了行(而仅更新了 0 行),那么您需要检查 using PDOStatement::rowCount(),它将告诉您上一个查询中受影响的行数。

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

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

为了禁用这种意外行为。

于 2012-08-05T23:19:43.580 回答
13
$stmt->execute();
$count = $stmt->rowCount();

if($count =='0'){
    echo "Failed !";
}
else{
    echo "Success !";
}
于 2017-02-21T17:15:01.623 回答