对于INSERT语句,似乎可以使用if (isset($connect->lastInsertId()))
来检查INSERT语句是否成功。 (如果我错了,请纠正我。)
但对于UPDATE语句,我怎么知道它是否成功?
例如,我有一个基本的:
$statement=$connect->prepare("UPDATE users SET premium='1' WHERE userid=?");
$statement->execute(array($id));
提前多多感谢。此致
答案 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 !";
}