2016-03-08 89 views
0

我试图上传图像到数据库使用准备好的语句。每当我执行查询时,字段名称和ID都会按照预期正确插入到数据库中,除了我在数据库中获得0字节的图像。我试图使用move_uploaded_file()上传多个图像,它工作,但它只是没有与数据库我试图上传一个只有10kb大小的图像,并没有奏效。它在数据库中一直给我0字节。试图上传多个图像到数据库不工作

这里是我的代码

//uploading image to database 
function upload_image($last_id, $conn) 
{ 
    $extension = [ 
     "jpeg", 
     "jpg", 
     "png", 
     "gif", 
    ]; 
    if (isset($_POST["submit"])) { 
     //in case of uploading multiple images 
     foreach ($_FILES["input"]["tmp_name"] as $key => $tmp_name) { 
      $name = basename($_FILES["input"]["name"][$key]); 
      $imageFileType = pathinfo($name, PATHINFO_EXTENSION); 

      if (in_array($imageFileType, $extension)) { 
       $stmt3 = $conn->prepare("INSERT INTO image (id ,name, image) VALUES (?, ?, ?)"); 
       $image = addslashes(file_get_contents($_FILES["input"]["tmp_name"][$key])); 
       $stmt3->bind_param("isb", $last_id, $name, $image); 
       $stmt3->execute(); 
       $stmt3->close(); 
      } 
     }//end loop 
    }//end if 
}//end function 

没有必要把表单的HTML代码,因为它已经与move_uploaded_file()

+0

你检查的'$ _FILES值[“输入”] [“tmp_name的值”] [$关键]'一看就知道它返回一个有效的文件路径,并且脚本运行时该映像文件出现在该位置? – ADyson

+0

另一个问题是'addslashes'旨在与字符​​串一起使用。您正尝试将图像的(二进制)内容传递给它。我不太清楚你使用该功能的意图。 – ADyson

+0

是的,我已经尝试使用相同的变量$ _FILES [“input”] [“tmp_name”] [$ key]使用move_uploaded_file()执行相同的代码,并且它的工作原理 – has19

回答

0

工作,我只在更换了$图像数据类型blob'b'的bind_param到字符串's',它的工作原理。

$stmt3->bind_param("iss", $last_id, $name, $image); 

不知道为什么它不工作的其他方式