2016-11-08 160 views
2

无处我找到了解决方案来检索受影响的更改行数(不是找到的匹配行)。 每个解决方案都是 “发现/匹配的行” 只是:更新SQLite,如何获取受影响的更改行数(不是找到的匹配行)

但我想知道更新的行实数(蒙山型动物值仅在更新语句之前)。

看着SQL "matching found rows" vs "affected rows",既没有命令行,也没有连接器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

我有没有办法做到这一点?

我似乎并不孤单希望这种改善...

+0

你的问题是SQLite的,它不支持你想要的东西,因为它没有比较行是否有真正的变化,只要它匹配更新即可。 –

回答

1

UPDATE语句更新行。就这个数字而言,新值恰好与旧值相同无关紧要。

如果你不想用相同的值来计算行,你必须手动筛选出来:

UPDATE table_update_count 
SET val = 'AB' 
WHERE val IS NOT 'AB'; 
+0

是的,但动态查询是不可能知道是否有变化。 例如,在Android下,没有在WHERE子句中声明每个“NOT NEW value”列: 'public int updateContact(int id,Contact contact){' 'ContentValues values = new ContentValues();' 'values.put (COL_NAME,contact.getName());' 'values.put(COL_PHONE,contact.getPhone());' 'return bdd.update(TABLE_CONTACTS,values,COL_ID +“=”+ id,null);' '}' 显然,数据库本身不会这样做...并且没有办法不改变where子句。 – immobiluser