Codeigniter查询构建器类结果

时间:2019-03-04 13:52:14

标签: php codeigniter query-builder

是否可以在codeigniter查询构建器类中为每个成功的查询假设,如果失败,它将自动返回true和false?

如果是这样,它是否适用于CRUD?还是仅在插入和删除数据时才如此?要进行更新,我必须检查受影响的行吗?还是如果更新成功,它还会返回真实结果吗?

例如:

控制器:

$data = array('username' => $this->input->post('username'),
    'password' => password_hash($this->input->post('password'), PASSWORD_BCRYPT),
    'date_created' => mdate('%Y-%m-%d', time())
);

$result = $this->account_model->create($data);

if($result == TRUE){
    $this->session->set_flashdata('message', 'Registration Successful');
    redirect('pages/login');
}else{
    $this->session->set_flashdata('message', 'Registration Failed');
    redirect('pages/register');
}

型号:

public function create($new_user){
    $insert = array('username' => $new_user['username'],
        'password' => $new_user['password'], 
        'date_created' => $new_user['date_created']
    );

    $result = $this->db->insert('user', $insert);

    return $result;

}

另外,如果我返回查询语句本身会不好吗?喜欢,

return $this->db->insert('user', $insert);

1 个答案:

答案 0 :(得分:2)

不。并不是的。 但是,您可以控制模型返回的内容。请记住,例如,空结果集不一定是“失败”查询。在很多用例中,空结果集可能是一件好事。

实际运行查询后,您将获得一个带有结果的对象

例如,选择时,您可以执行$result = $this->db->get(),而您的$result变量将成为具有许多您可以访问的信息的对象:

返回的行数:$result->num_rows(); 返回的内容:$result->result(); 特定的行:$result->row(0); 特定行中的特定字段:$result->row(3)->field_name;

插入或更新时,$this->db->affected_rows()可用,因此您可以检查更新或插入了多少行。如果需要插入行的表的主键值,则插入操作还会使$this->db->insert_id()可用。

因此,您可以控制逻辑。

选择时,我通常会这样做:

$query = $this->db->get();
if ($query->num_rows() == 0)
{
  return false;
}

else
{
  return $query->row(0);
}

然后,我在控制器中检查模型是否返回false或真实结果集(如果我只是在检查是否存在某个结果集,有时我只返回true而不是实际结果集)。您可以根据需要定制结果。

插入时,我通常会检查:

if ($this->db->affected_rows() != 0)
{
  return $this->db->insert_id();
}

else
{
  return false;
}

(在控制器中,返回的false将被视为“插入失败”)。

要更全面地回答您的问题:否,默认情况下什么也没有发生,但是Codeigniter为您提供了根据特定需求和喜好定制网站行为所需的一切