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_rows和trans_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)
Mirov当我们使用codeigniter时,只有当输入字段的值发生一些变化时才会更新数据,然后$this->db->affected_rows()将返回大于0的值.
假设我们有两个字段name和email,如果我们试图提交表单不改变任何领域的则$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)
| 归档时间: |
|
| 查看次数: |
40786 次 |
| 最近记录: |