2017-02-13 4 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 
]); 

Обратите внимание на изменение в разделе VALUES запроса INSERT. Это исправит ошибку, которую вы получите. Я не копаю в том, чего вы пытаетесь достичь с помощью этого запроса, и с точки зрения, что с моей точки зрения лучше хранить изображения в файловой системе и URL-адресах в БД

+0

Используя ваши изменения, я получаю несколько другой код ошибки: SQLSTATE [HY093]: Недопустимый номер параметра: параметр не определен – YABOI

+0

Вы уверены, что разместили здесь правильный запрос? Эта ошибка означает, что вы определили несколько параметров в запросе, отличном от количества элементов в массиве. –

+0

Я, должно быть, что-то пропустил. На этот раз я копировал и вставлял ваши изменения, и это сработало. Спасибо! – YABOI