2016-04-07 3 views
1

вот мой код загрузки:PHP MYSQL PDO BLOB загрузка всегда пустой нулевой байт

public function upload($id, $title, $year, $comments){ 
    $imagedata = fopen($_FILES['up_images']['tmp_name'], 'rb'); 

    $query = 'INSERT INTO uploads (uid, title, year, comments, image, image_name) VALUES (:uid, :title, :year, :comments, :image, :image_name)'; 
    $statement = $this->db->prepare($query); 
    $statement->bindValue(':uid', $id); 
    $statement->bindValue(':title', $title); 
    $statement->bindValue(':year', $year); 
    $statement->bindValue(':comments', $comments); 
    $statement->bindValue(':image', $imagedata, PDO::PARAM_LOB); 
    $statement->bindValue(':image_name', $_FILES['up_images']['name']); 
    $statement->execute(); 

    // return $imagedata 
    return $_FILES['up_images']['error']; 
} 

, как вы можете видеть, я возвратил ошибку и фактического изображение BUFFER

ошибки = 0

возвращенного сырья буфер имеет все данные необработанного изображения

все мои ПАРАМЕТРЫ проходят и успешно загружаются в базу данных MYSQL, но данные изображения НИКОГДА не передаются: heres экран моего PHPmyadmin

enter image description here

здесь структура таблицы:

enter image description here

и вот моя форма:

<form action="digest.php" method="POST" id="up_form" enctype="multipart/form-data"> 
<input id="up_acct" name="up_acct" type="text" placeholder="Your ID" value="<?php echo $_GET['up_acct']; ?>" /> 
<input id="up_title" name="up_title" type="text" placeholder=" Title" value="<?php echo $_GET['up_title']; ?>" /> 
<input id="up_year" name="up_year" type="text" placeholder="Year" value="<?php echo $_GET['up_year']; ?>" /> 
<input id="up_images" name="up_images" type="file" accept=".jpg,.jpeg,.png,.gif,.svg" /> 
<textarea id="up_comments" name="up_comments" placeholder="COMMENTS (optional)" cols="22" rows="5"><?php echo $_GET['up_comments']; ?></textarea> 
<input type="submit" name="up_submit" id="up_submit" value="UPLOAD"> 

размер изображения я пытаюсь загрузка - 80 кб? ? ? ? ?

значительно ниже моих настроек php.ini.

my FILE DUMP отображает все допустимые данные, включая действительный каталог и имя временного номера и EVEN SIZE!

Я пропустил какой-то неясной конфигурации на mysql? PHP?

также - я не могу хранить имя Filepath и извлекать из файловой системы - часть большого проекта

+1

Не следует ли использовать 'bindParam' для' PDO :: PARAM_LOB' вместо 'bindValue'? – Anthony

ответ

1

Отъезд documentation page для PDO::PARAM_LOB - bindParam (не bindValue) хочет указатель файла, а не содержимое файла ,

$imagedata = fopen($_FILES['up_images']['tmp_name'], 'rb'); 
$statement->bindParam(':image', $imagedata, PDO::PARAM_LOB); 

Как уже упоминалось, как правило, не считается хорошей практикой для хранения изображений в БД, если не очень явная причина для этого, и отрицательные стороны хорошо изучены. Если вы на 100% уверены, что это необходимо, возможно, это не так.

+3

Разве это не 'bindParam' вместо' bindValue' для этого сценария? – Anthony

+0

@ Энтони Да, исправил код. –

+1

@ Dan - примечание Антония относится и к вам –

Смежные вопросы