当我尝试上传图片然后将其作为BLOB放入数据库时。
我使用的代码在插入另一个表时效果很好,所以我基本上只使用了另一个插入查询的代码。
这是PHP:
<?php
error_reporting(-1);
if (isset($_POST['gallery-upload'])) {
$hostname='**';
$username='**';
$password='**';
$file = $_FILES['image'] ['tmp_name'];
$tmpName = $_FILES['image']['tmp_name'];
$filter = $_POST['filter'];
$fp = fopen($tmpName, 'rb');
try {
$dbh = new PDO("mysql:host=$hostname;dbname=dddoecje_campu",$username,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
$stmt = $dbh->prepare("INSERT INTO `gallery`(`id`, `image`, `filter`) VALUES ('',:image,:filter)");
$stmt->bindParam(':filter', $filter);
$stmt->bindParam(':image', $fp, PDO::PARAM_LOB);
$dbh->errorInfo();
$stmt->execute();
// use exec() because no results are returned
header("Location: index.php");
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$dbh = null;
}
?>
这就是形式:
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-body">
<form action="upload-gallery.php" method="post" enctype="multipart/form-data">
<div class="form-group">
<i class="icon-cloud-upload"></i>
<span>Select file</span>
<input type="file" accept="image/png, image/jpeg, image/gif" data-max-size="5000" name="image">
</div>
<select name="filter">
<option value="all">All</option>
<option value="area">Area</option>
<option value="resort">Resort</option>
<option value="rinjani">Rinjani</option>
</select>
<button style="margin-top: 10px;" name="gallery-upload" class="btn btn-default"><?php echo $upload_gallery;?></button>
</form>
</div>
</div>
</div>
这是我插入图片后在数据库中看到的内容:
一切都插入正常,但由于某种原因只有BLOB不插入。也没有data-max-size
它不起作用。
答案 0 :(得分:-1)
您已打开指向文件的文件处理程序,并将文件处理程序作为参数传递。
尝试将文件处理程序引用的完整内容读入变量,并将该变量传递给预准备语句。您可以使用fgets()命令执行此操作。
因为我在手机上写这个答案,所以我无法轻易地告诉你如何操作。