PHP MYSQL PDO BLOB上传始终为空零字节

时间:2016-04-07 04:44:55

标签: php mysql image pdo

这是我的上传代码:

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'];
}

你可以看到我返回了ERROR和实际的IMAGE BUFFER

错误= 0

返回的原始缓冲区包含所有原始图像数据

我的所有参数都通过并成功上传到MYSQL数据库,但图像数据永远不会传递:继承我的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">

我要上传的图片尺寸是80kb? ? ? ? ?

远低于我的php.ini设置。

my FILE DUMP显示所有有效数据,包括有效的临时目录和名称以及EVEN SIZE!

我在mysql上错过了某种类型的模糊配置吗? PHP?

还 - 我无法存储文件路径名称并从文件系统中检索 - 更大项目的一部分

1 个答案:

答案 0 :(得分:1)

查看PDO::PARAM_LOB的{​​{3}} - bindParam(不是bindValue)想要文件指针,而不是文件的内容。

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

正如您所提到的,将图像存储在数据库中通常不被视为良好做法,除非有明确的理由这样做,并且缺点是很好理解。如果你不是100%确定它是必要的,那可能不是。