codeigniter查询生成器将使用几乎任何内容更新db

时间:2017-08-20 12:51:19

标签: php mysql codeigniter

我是codeigniter的新手,并试图了解查询构建器功能。我目前有一个更新方法,我传递用户输入的数据来更新数据库中的记录。我注意到它似乎是成功的,无论我扔到哪种垃圾数据,我想知道是否有一个设置或我需要改变的东西,或者是什么。

如下所示,在我的模型中,我绕过用户输入的值并输入垃圾数据,但仍然成功。它只是插入0000-00-00。 DB中的DOB是日期数据类型。

我总是从中获得成功结果,并且它更新了数据库,因此技术上它成功了。我有控制措施来防止垃圾数据被发送到模型,但是它不会让我感觉温暖模糊,因为它知道它的行为是这样的。

控制器:

$updateResult = $this->Patients_model->update_patient_profile($this->data['post_data']);
    if($updateResult === true)
    {
      $this->data['patient_profile'] = $this->Patients_model->get_patient_profile($patientId);
      $this->data['update_result'] = true;
      $this->load->view('index', $this->data);
    }
    else
    {
      $this->data['update_result'] = false;
      print_r($updateResult);
    }

型号:

function update_patient_profile($data)
{
    $patient_id = $data['patient_id'];

    unset($data['patient_id']);
    $data['dob'] = 'this is not even a date'; //will store 0000-00-00 in DB.

    $this->db->where('patient_id', $patient_id);
    $this->db->update($this->patientsTable, $data);

    if($this->db->affected_rows()) {
        return true;
    }
    else
    {
        return $this->db->error();
    }
}

1 个答案:

答案 0 :(得分:3)

您可以使用PHP检查并检查无效日期的错误。试试这个:

function update_patient_profile($data)
{
    $patient_id = $data['patient_id'];

    unset($data['patient_id']);
    $check_date = $data['dob'];
    if(strtotime($check_date))
    {
      $data['dob'] = date("Y-m-d",strtotime($check_date)); // to confirm date is valid and equivalant to database format
    }
    else
    {
      throw new Exception("Invalid date", 1);      
    }
    $data['dob'] = 'this is not even a date'; //will store 0000-00-00 in DB.

    $this->db->where('patient_id', $patient_id);
    $this->db->update($this->patientsTable, $data);

    if($this->db->affected_rows()) {
        return true;
    }
    else
    {
        return $this->db->error();
    }
}