使用CodeIgniter将图像上载到我的数据库

时间:2016-10-23 12:19:59

标签: php mysql codeigniter

我知道将图像上传到数据库是错误的,但我现在需要这样做。

我的功能如下:

public function runk_image_post()
{
    $id = $this->get('id');
    $imagePath = $_FILES['data']['tmp_name'];

    /// $imagePath = Applications/MAMP/tmp/php/php6cpBhM

    $this->db->trans_start();
    $this->db->query("UPDATE runks SET runk_image = LOAD_FILE('$imagePath') WHERE runk_id='$id';");
    $this->db->trans_complete();

    $query = $this->db->query("SELECT * FROM runks WHERE runk_id = '$id';");
    $message = $query->row();

    if ($this->db->trans_status() === FALSE) {
        $data = ['message' => 'Image not uploaded'];
        $this->response($data, REST_Controller::HTTP_BAD_REQUEST);
    } else {
        $this->response($message, REST_Controller::HTTP_OK);
    }
}

它返回HTTP_OK响应,但在我的数据库中的runk_image列(类型:blob)中没有添加任何内容。我究竟做错了什么?

我认为这与我的$ imagePath变量有关。

1 个答案:

答案 0 :(得分:2)

如果使用LOAD_FILE(),则应传递文件的绝对路径。

  

编辑:我认为不应该使用LOAD_FILE()(或者至少它没有好的做法),因为使用它断言您的Web服务器和数据库服务器可以访问同一个文件系统,但情况并非总是如此

另外,您应该将文件内容加载到变量并将其作为值传递给您的' runk_image' blob,在这种情况下,代码应如下所示:

public function runk_image_post(){
    $id = $this->get('id');
    $imagePath = $_FILES['data']['tmp_name'];

    $imageBin = file_get_contents($imagePath);

    $this->db->trans_start();
    $this->db->where('runk_id', $id);
    $this->db->update('runks',array('runk_image'=>$imageBin));
    $this->db->trans_complete();

    $message = $query->row();

    if ($this->db->trans_status() === FALSE) {
        $data = ['message' => 'Image not uploaded'];
        $this->response($data, REST_Controller::HTTP_BAD_REQUEST);
    } else {
        $this->response($message, REST_Controller::HTTP_OK);
    }}