2017-02-13 65 views
-1

我期望的目標是允許通過PHP使用PDO將圖像上傳到數據庫。無效的參數編號:混合的名稱和位置參數

數據庫不會有很多值,最多隻有十到十五個,所以我覺得讓圖像上傳到那裏會更舒服。

這是我的PHP代碼:

<?php 
require '../../app/start.php'; 
if (!empty($_POST)) { 
$name  = $_POST['name']; 
$position = $_POST['position']; 
$detail  = $_POST['detail']; 
$imageData = addslashes(file_get_contents($_FILES['userImage']['tmp_name'])); 
$imageProperties = getimageSize($_FILES['userImage']['tmp_name']); 
$insertPage = $db->prepare(" 
INSERT INTO about (name, position, detail, imageType, imageData) 
VALUES (:name, :position, :detail, {$imageProperties['mime']}, {$imageData}) 
"); 
$insertPage->execute([ 
'name'  => $name, 
'position' => $position, 
'detail' => $detail, 
'imageType' => $imageProperties['mime'], 
'imageData' => $imageData 
]); 
} 
header('Location: ' . BASE_URL . '/admin/about/list.php'); 
require VIEW_ROOT . '/admin/about/add.php'; 
?> 

,這裏是我的HTML:

<form action="<?php echo BASE_URL; ?>/admin/about/add.php" method="POST" enctype="multipart/form-data" autocomplete="off"> 
     <label for="name"> 
      Name 
      <input type="text" name="name" id="name" value=""> 
     </label> 

     <label for="position"> 
      Position 
      <input type="text" name="position" id="position" value=""> 
     </label> 

     <label for="detail"> 
      Detail 
      <textarea name="detail" id="detail" cols="30" rows="10"></textarea> 
     </label> 

     <label for="imageId"> 
      Upload Image File: 
      <input name="userImage" id="userImage" type="file" class="inputFile" /> 
     </label> 

     <input type="submit" value="Add Page"> 
    </form> 

表:

id int(11) NO PRI  auto_increment 
imageId tinyint(3) NO    
imageType varchar(25) YES    
imageData mediumblob NO    
name varchar(35) NO    
position varchar(35) NO    
detail varchar(120) NO    

我不確定如果上述定義表。我老實說不熟悉你指的是什麼。

這是兩個錯誤,當我試圖上傳的圖片我越來越:

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters in /admin/about/add.php on line 24  
Warning: Cannot modify header information - headers already sent by (output started at /admin/about/add.php:24) in /admin/about/add.php on line 26 

利用這一點,我得到了一些警告和圖像不會上傳。

如何修復我的代碼以允許將圖像上傳到數據庫?

編輯:我道歉,我以前複製並粘貼了錯誤的html代碼。

+0

你的表格是如何定義的? – Alfabravo

+5

如果你的數據庫是爲了保持小,爲什麼上傳圖像呢?這會產生相反的效果。這種邏輯超出了我的想法。有很少的情況下,將圖像上傳到數據庫是一個好主意。圖像是文件,所以只需將它們保存在文件系統中即可。 –

+0

@Alfabravo我很抱歉,但我不知道你的意思是這個問題。 – YABOI

回答

2

$insertPage = $db->prepare(" 
INSERT INTO about (name, position, detail, imageType, imageData) 
VALUES (:name, :position, :detail, {$imageProperties['mime']}, {$imageData}) 
"); 
$insertPage->execute([ 
'name'  => $name, 
'position' => $position, 
'detail' => $detail, 
'imageType' => $imageProperties['mime'], 
'imageData' => $imageData 
]); 

應該

$insertPage = $db->prepare(" 
INSERT INTO about (name, position, detail, imageType, imageData) 
VALUES (:name, :position, :detail, :imageType, :imageData) 
"); 
$insertPage->execute([ 
'name'  => $name, 
'position' => $position, 
'detail' => $detail, 
'imageType' => $imageProperties['mime'], 
'imageData' => $imageData 
]); 

注意到在INSERT查詢的VALUES部分的變化。這將解決你得到的錯誤。我不是在挖掘你試圖用這個查詢實現的目標,並且從我的角度來看,最好將圖像存儲在文件系統中,並在DB中存儲網址。

+0

使用您的更改我得到一個稍有不同的錯誤代碼: SQLSTATE [HY093]:無效的參數編號:參數未定義 – YABOI

+0

您確定您已經在此張貼正確的查詢嗎?這個錯誤意味着你已經在查詢中定義了一些不同於數組中項目數的參數 –

+0

我一定錯過了一些東西。我這次複製並粘貼您的更改,並且工作正常。謝謝! – YABOI

相關問題