2017-02-13 4 views
-1

Mein gewünschtes Ziel ist es, das Hochladen von Bildern in die Datenbank über PHP mit PDO zu ermöglichen.Ungültige Parameternummer: gemischte benannte und positionale Parameter

Die Datenbank wird nicht viele Werte haben, höchstens zehn bis fünfzehn, also fühle ich mich wohler damit, die Bilder dort hochladen zu lassen.

Hier ist meine PHP-Code:

<?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'; 
?> 

und hier ist mein 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> 

Tabelle:

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    

Ich bin nicht sicher, ob die oben in der Tabelle definiert. Ich bin ehrlich gesagt nicht vertraut mit dem, worauf Sie sich beziehen.

Dies sind die beiden Fehler, die ich immer bin, wenn ich versuche, das Bild zu laden:

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 

diese verwenden, erhalte ich ein paar Warnungen und das Bild nicht laden.

Wie kann ich meinen Code reparieren, um das Hochladen von Bildern in die Datenbank zu ermöglichen?

Edit: Ich entschuldige mich, ich kopierte zuvor und kopierte den falschen HTML-Code.

+0

Wie ist Ihre Tabelle definiert? – Alfabravo

+5

Wenn Ihre Datenbank klein gehalten werden soll, warum sollten Sie Bilder hochladen? Das wird den gegenteiligen Effekt haben. Diese Logik ging über meinen Kopf. Es gibt sehr wenige Fälle, in denen das Hochladen von Bildern in eine Datenbank eine gute Idee ist. Bilder sind Dateien, also behalte sie einfach im Dateisystem. –

+0

@ Alfabravo Ich entschuldige mich, aber ich weiß nicht, was Sie mit dieser Frage meinen. – YABOI

Antwort

2

Diese

$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 
]); 

sollte

$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 
]); 

beachten Sie die Änderung in der VALUES-Abschnitt der INSERT-Abfrage sein. Dies wird den Fehler beheben, den Sie bekommen. Ich grabe nicht in das, was Sie versuchen, mit dieser Abfrage und mit dem Punkt zu erreichen, dass es aus meiner Sicht besser ist, Bilder im Dateisystem und URLs in der DB zu speichern.

+0

Mit Ihren Änderungen bekomme ich einen etwas anderen Fehlercode: SQLSTATE [HY093]: Ungültige Parameternummer: Parameter wurde nicht definiert – YABOI

+0

Sind Sie sicher, dass Sie hier die richtige Abfrage gepostet haben? Dieser Fehler bedeutet, dass Sie eine Anzahl von Parametern in der Abfrage definiert haben, die sich von der Anzahl der Elemente im Array unterscheidet. –

+0

Ich muss etwas verpasst haben. Ich habe dieses Mal Ihre Änderungen kopiert und eingefügt und es hat funktioniert. Vielen Dank! – YABOI

Verwandte Themen