当可能没有更新行时,检查db->是否使用Codeigniter更新成功

And*_*sov 24 activerecord codeigniter

我一直在$this->db->affected_rows()用来检查更新是否成功.但是,当用户输入已存储的相同数据(因为没有实际更新列)时,这不起作用.我的解决方法是获取存储的数据,与输入的数据进行比较,如果不同则更新,如果相同则返回NO_CHANGE常量.使用JSON数据,还有一个额外的解析步骤.

有没有更简单的方法来检查更新没有错误?在那里,事先不需要获取存储的数据?

use*_*810 43

如果我理解正确,您可以使用事务来确保更新没有错误:

$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->update('table',$array);
$this->db->trans_complete();

if ($this->db->trans_status() === FALSE)
{
    // generate an error... or use the log_message() function to log your error
}
Run Code Online (Sandbox Code Playgroud)

请记住,这只会验证在事务内的所有查询中没有SQL错误.

这是更多信息Code Igniter Active Record Transaction的链接


s1x*_*s1x 10

除了接受的答案解决方案,您可以扩展代码,如下所示,以区分affected_rowstrans_status结果/错误.

$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->update('table',$array);
$this->db->trans_complete();
// was there any update or error?
if ($this->db->affected_rows() == '1') {
    return TRUE;
} else {
    // any trans error?
    if ($this->db->trans_status() === FALSE) {
        return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)


Hai*_*man 6

Mirov当我们使用codeigniter时,只有当输入字段的值发生一些变化时才会更新数据,然后$this->db->affected_rows()将返回大于0的值.

假设我们有两个字段nameemail,如果我们试图提交表单不改变任何领域的则$this->db->affected_rows()返回0,否则,它将返回1.

所以更好的方法是使用

if($this->db->affected_rows() >=0){
  return true; //add your code here
}else{
  return false; //add your your code here
}
Run Code Online (Sandbox Code Playgroud)

  • 这不应该是$ this-> db-> affected_rows()> 0然后呢? (5认同)