在CodeIgniter中有类似$ this-> db-> matched_rows()的东西吗?

时间:2016-04-05 13:19:10

标签: php mysql codeigniter

我想更新表中的条目或插入(如果不存在)。我正在使用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__);
}

2 个答案:

答案 0 :(得分:0)

您需要检查模型文件中的$this->db->affected_rows()return TRUE or FALSE,而不是控制器。要检查重复输入,您需要使用选择查询

进行检查

<强> MODEL

 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;
    }
}

<强> CONTROLER

$insert = $this->api_vendor_model->update_vendor_login_time($vendor_id, $datainsert);
if (!$insert) {

    $this->api_vendor_model->insert_vendor_login_time($datainsert);
}

答案 1 :(得分:0)

不,没有这样的功能。

affected_rows()以这种方式工作,因为这是数据库的工作原理 - 它不会返回它没有实际更新的行的反馈。这超出了框架的控制范围。