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() 的东西吗?的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter - 在帖子的基础上禁用 XSS 过滤

Codeigniter:从多个表中选择

使用 Codeigniter 搜索表单

如何在 Codeigniter 中使用类似命令计算行数

在 CodeIgniter 的钩子中使用 Loader 类

codeigniter:在非条件下查询 [重复]