Mysql更新查询,如果值没有改变怎么办?我该如何检查?

时间:2013-11-08 11:33:35

标签: php mysql

执行UPDATE语句时,如果value与new值相同,则rowCount不会更改。但就我的应用而言,这也是成功的。那么无论值是否发生变化,我如何检查更新是否成功?

$stmt = $conn->prepare('UPDATE users SET name = :name WHERE id = :id');

$result = $stmt->rowCount(); // 1

if ($result == 1) {echo "success!";}

3 个答案:

答案 0 :(得分:3)

您没有执行查询,只是准备它。因此,rowCount()将报告无效的行数(指向最后执行的查询的行),因为尚未影响任何行,并且系统事先不知道将有多少行,一旦执行带有特定参数值的预准备语句。

您应该在执行语句时检查是否成功。 execute()方法如果成功则返回true,否则返回false。因此,如果执行成功是您唯一需要的,那么您应该按照以下方式执行:

$stmt = $conn->prepare('UPDATE users SET name = :name WHERE id = :id');

$result = $stmt->execute($params); // <-- execute first!

if ($result) {echo "success!";}

答案 1 :(得分:2)

我同意 Legionar 。但我没有使用计数来添加包含上次更新时间的列。这样我就可以使用它来获取在特定时间之后更新的条目。通过这种方式,我可以减少发送给客户端的条目数。最终决定基于您的要求。

$stmt = $conn->prepare('UPDATE users SET name = :name, updateTime = currentTime WHERE id = :id');   
$result = $stmt->rowCount(); // 1
if ($result == 1) {echo "success!";}

答案 2 :(得分:0)

我认为这不能正常完成,但您可以使用其他专栏寻求帮助。

将列counter添加到您的users表格中。然后在每次更新时增加此值。

$stmt = $conn->prepare('UPDATE users SET name = :name, counter = counter + 1 WHERE id = :id');

$result = $stmt->rowCount(); // 1

if ($result == 1) {echo "success!";}

现在,无所谓,如果值name会发生变化,counter每次都会更改,因此每次1成功返回。

或者 Damodaran 回答,而不是counter,您可以在更新时使用当前日期时间。