我知道将图像上传到数据库是错误的,但我现在需要这样做。
我的功能如下:
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变量有关。
答案 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);
}}