是否可以安全地在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);
解决方法:
不,不是.
但是,您可以控制模型返回的内容.请记住,例如,空结果集不一定是“失败”查询.在很多用例中,空结果集可能是一件好事.
实际运行查询后,您将获得一个带有结果的对象
例如,当选择时,您可以执行$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;
}
(在控制器中,返回的错误将被视为“插入失败”).
为了更全面地回答您的问题:否,默认情况下什么也没有发生,但是Codeigniter为您提供了根据特定需求和喜好定制网站行为所需的一切