我正在使用PDO进行更新查询。我想弄清楚我的更新查询是否没有更改数据库中的任何内容,因为:
rowCount()
会返回0
。rowCount()
在这种情况下也会返回0
。我是否被强制在SELECT语句的UPDATE之前,以确定我正在尝试更新的记录是否确实存在?或者是否存在这种事情的另一种常见做法。
我一直在阅读文档,但无法找到确凿的答案: http://php.net/manual/en/pdostatement.rowcount.php
我遇到过这个StackOverflow的答案,这表明rowCount()在某些情况下可能会返回NULL,但我不认为它适用于我的场景: 见Why does PDO rowCount() return 0 after UPDATE a table without modifying the existing data?
来自这个问题的评论:
如果数据尚未修改,则rowCount将为零。如果 数据被修改,rowCount将是一个或更高。如果有的话 错误,rowCount将为null或false或非零值。
更新 我发现了另一个问题,在下面的评论中给出了一个命题的例子: Getting the insert and update ID with PDO
UPDATE2
另一个问题提出了另一个解决方案,通过PDO::MYSQL_ATTR_FOUND_ROWS
PDO - check if row was updated?
答案 0 :(得分:0)
您可以在'where'子句中添加条件,例如“和ColumnToUpdate<>'NewValue'”
答案 1 :(得分:0)
' ave使用@ hjpotter92的建议解决它。
// UID is the unique ID of my table, autoincremented etc...
// Firstly, let's try to update my row
$query = 'UPDATE my_table SET x=0, y=1, uid=LAST_INSERT_ID(uid) WHERE z=2';
$sth = $dbh->prepare($query);
if($sth->execute()) {
if($dbh->lastInsertId() == 0) { // Record was not found, so insert it.
$query = 'INSERT INTO my_table (x,y) VALUES (0,1)';
$sth = $dbh->prepare($query);
$sth->execute();
if($sth->rowCount() > 0) {
echo $dbh->lastInsertId(); // Return the UID of the inserted row
}
}
}