CodeIgniter 中有类似 $this->db->matched_rows() 的东西吗?
Posted
技术标签:
【中文标题】CodeIgniter 中有类似 $this->db->matched_rows() 的东西吗?【英文标题】:Is there something like $this->db->matched_rows() in CodeIgniter? 【发布时间】:2016-07-25 11:10:00 【问题描述】:我想更新表中的条目,如果不存在则插入。我正在使用affected_rows()
函数,但如果数据未更改,它会返回 0 并插入重复行。
我正在使用此代码,
$datainsert = array(
"vendor_id" => $vendor_id,
"c_date_time" => date('Y-m-d H:i:s')
);
$this->api_vendor_model->update_vendor_login_time($vendor_id, $datainsert);
if ($this->db->affected_rows() == 0)
$this->api_vendor_model->insert_vendor_login_time($datainsert);
但如果没有行受到影响但存在 vendor_id 条目,则它不起作用。
function update_vendor_login_time($vendor_id, $data)
$this->db->where('vendor_id', $vendor_id);
$this->db->update('fa_vendor_login_time', $data);
$this->error_check(__FUNCTION__);
【问题讨论】:
粘贴update_vendor_login_time()
模型函数的代码!!
用更新功能码编辑的问题
【参考方案1】:
您需要检查模型文件中的$this->db->affected_rows()
和return TRUE or FALSE
,而不是控制器。要检查重复条目,您需要使用选择查询来检查它
型号
function update_vendor_login_time($vendor_id, $data)
$q = $this->db->select('id')// add your column nae here
->from('fa_vendor_login_time')
->where(array('vendor_id' => $vendor_id))->get();
if ($q->num_rows() == 0)
$this->db->where('vendor_id', $vendor_id);
$this->db->update('fa_vendor_login_time', $data);
$this->error_check(__FUNCTION__);
if ($this->db->affected_rows() > 0)
return TRUE;
else
return FALSE;
else
return TRUE;
控制器
$insert = $this->api_vendor_model->update_vendor_login_time($vendor_id, $datainsert);
if (!$insert)
$this->api_vendor_model->insert_vendor_login_time($datainsert);
【讨论】:
会有什么不同?如果 datainsert 值已经存在,它仍然会返回 false,因此会插入一个重复的条目 勾选此项以防止重复输入***.com/questions/13970942/… 所以这确实意味着我必须在更新或插入之前触发 get 查询【参考方案2】:不,没有这样的功能。
affected_rows()
之所以这样工作,是因为数据库就是这样工作的——它不会为实际上没有更新的行返回反馈。这超出了框架的控制范围。
【讨论】:
除了在更新或插入之前触发 get 查询之外,还有其他方法吗?以上是关于CodeIgniter 中有类似 $this->db->matched_rows() 的东西吗?的主要内容,如果未能解决你的问题,请参考以下文章