Php 更新SQLite,如何获取受影响的更改行数(不是找到的匹配行)

Php 更新SQLite,如何获取受影响的更改行数(不是找到的匹配行),php,sql,sqlite,pdo,Php,Sql,Sqlite,Pdo,我在任何地方都没有找到检索受影响的更改行数(而不是找到的匹配行)的解决方案。 每个解决方案仅为“找到/匹配行”: PHP PDO:$stmt-> 但是我想知道更新的实际行数(只有在update语句之前才有不同的值) 仔细看,无论是命令行还是连接器PHP PDO都无法返回实际更改的行数 要恢复,请执行以下操作: CREATE TABLE table_update_count ('id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, 'v

我在任何地方都没有找到检索受影响的更改行数(而不是找到的匹配行)的解决方案。 每个解决方案仅为“找到/匹配行”:

  • PHP PDO:$stmt->
但是我想知道更新的实际行数(只有在update语句之前才有不同的值)

仔细看,无论是命令行还是连接器PHP PDO都无法返回实际更改的行数

要恢复,请执行以下操作:

CREATE TABLE table_update_count ('id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, 'val' VARCHAR);
INSERT INTO table_update_count (val) VALUES ('AA');
INSERT INTO table_update_count (val) VALUES ('AB');
UPDATE table_update_count SET val = 'AB';
获得的结果:2

预期结果:1

我有办法吗


我似乎不是唯一一个希望这种改进的人……

UPDATE语句更新了两行。就此计数而言,新值恰好与旧值相同并不重要

如果不想对具有相同值的行进行计数,则必须手动将其过滤掉:

updatetable\u UPDATE\u count
SET val='AB'
其中val不是“AB”;

是,但使用动态查询无法知道是否有更改。例如,在Android下,在WHERE子句中不声明每个“NOT NEW value”列:
public int updateContact(int id,Contact Contact){
ContentValues values=NEW ContentValues();
values.put(COL_NAME,Contact.getName());
返回bdd.update(TABLE_CONTACTS,values,COL_ID+“=”+ID,null);
}
很明显,数据库不会以本机方式执行此操作……而且如果不更改where子句,就没有办法。您的问题是SQLite,它不支持您想要的内容,因为它不会比较行是否有真正的更改,只要它与update匹配即可。