我正在使用PDO进行更新查询.我想弄清楚我的更新查询是否没有更改数据库中的任何内容,因为:
rowCount()在这种情况下返回0.rowCount()在这种情况下也会回归0.我是否被强制在SELECT语句的UPDATE之前,以确定我正在尝试更新的记录是否确实存在?或者是否有这种事情的另一种常见做法.
我一直在阅读文档,但无法找到确凿的答案:http: //php.net/manual/en/pdostatement.rowcount.php
我遇到过这个StackOverflow的答案,这表明rowCount()在某些情况下可能会返回NULL,但我不认为它适用于我的场景:请参阅为什么PDO rowCount()在UPDATE表之后返回0而不修改现有数据?
从这个问题的评论:
如果数据尚未修改,则rowCount将为零.如果数据已修改,则rowCount将为1或更高.如果出现错误,则rowCount将为null或false或非零值.
更新 我发现了另一个问题,在下面的评论中给出了一个命题的例子: 用PDO获取插入和更新ID
UPDATE2
另一个问题提出另一个解决方案,通过PDO::MYSQL_ATTR_FOUND_ROWS
PDO - 检查行是否更新?
我已经使用@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
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1609 次 |
| 最近记录: |