这是我的上传代码:
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的屏幕
这是表结构:
这是我的表格:
<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?
还 - 我无法存储文件路径名称并从文件系统中检索 - 更大项目的一部分
答案 0 :(得分:1)
查看PDO::PARAM_LOB
的{{3}} - bindParam
(不是bindValue
)想要文件指针,而不是文件的内容。
$imagedata = fopen($_FILES['up_images']['tmp_name'], 'rb');
$statement->bindParam(':image', $imagedata, PDO::PARAM_LOB);
正如您所提到的,将图像存储在数据库中通常不被视为良好做法,除非有明确的理由这样做,并且缺点是很好理解。如果你不是100%确定它是必要的,那可能不是。