我一直在使用$this->db->affected_rows()
来检查更新是否成功。但当用户输入的数据与已经存储的数据相同时,这就不起作用了(因为实际上没有更新任何列)。我的解决方法是获取存储的数据,与输入的数据进行比较,如果不同则更新,如果相同则返回NO_CHANGE常量。对于JSON数据,有一个额外的解析步骤。
有没有更简单的方法来检查更新是否有错误?比如,不需要事先获取存储的数据的东西?
我一直在使用$this->db->affected_rows()
来检查更新是否成功。但当用户输入的数据与已经存储的数据相同时,这就不起作用了(因为实际上没有更新任何列)。我的解决方法是获取存储的数据,与输入的数据进行比较,如果不同则更新,如果相同则返回NO_CHANGE常量。对于JSON数据,有一个额外的解析步骤。
有没有更简单的方法来检查更新是否有错误?比如,不需要事先获取存储的数据的东西?
6条答案
按热度按时间vql8enpb1#
如果我理解正确的话,你可以使用transactions来确保更新没有错误:
请记住,这只是验证在事务中的所有查询期间没有SQL错误。
更多信息Code Igniter Active Record Transaction
vbopmzt12#
除了可接受的答案解决方案之外,您还可以像下面这样扩展代码,以区分
affected_rows
和trans_status
结果/错误。7fhtutme3#
Mirov当我们使用codeigniter时,只有当输入字段的值发生变化时,数据才会更新,然后
$this->db->affected_rows()
将返回大于0的值。假设我们有两个字段
name
和email
,如果我们尝试在不更改任何字段的情况下提交表单,那么$this->db->affected_rows()
将返回0,否则将返回1。所以更好的方法是
sqxo8psd4#
我的“变通方法”很简单--就是包含一个 * 总是 * 更新的字段。例如,如果您有一个字段,并使用带秒的日期和时间值更新它-那么日期时间秒将始终不同,即使其他更新值仍然相同。
额外的好处是你有一个日期时间在数据库记录时,最后一次更新完成。
n53p2ov05#
我不知道为什么我们不能使用这个:
kqlmhetl6#
CodeIgniter语法4: