2016-03-08 91 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); 

不知道爲什麼它不工作的其他方式