Php 使用PDO插入时,Blob始终插入1B
当我试图上传一张图片,然后将其作为一个BLOB放入数据库时 当插入到另一个表中时,我使用的代码非常有效,所以我基本上只使用了另一个插入查询的代码 这是PHP:Php 使用PDO插入时,Blob始终插入1B,php,mysql,pdo,blob,Php,Mysql,Pdo,Blob,当我试图上传一张图片,然后将其作为一个BLOB放入数据库时 当插入到另一个表中时,我使用的代码非常有效,所以我基本上只使用了另一个插入查询的代码 这是PHP: <?php error_reporting(-1); if (isset($_POST['gallery-upload'])) { $hostname='**'; $username='**'; $password='**'; $file = $_FILES['image'] ['tmp_name']
<?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;
}
?>
您已经打开了一个指向您的文件的文件处理程序,并且正在将一个文件处理程序作为参数传递
尝试将文件处理程序引用的完整内容读入变量,并将该变量传递给准备好的语句。可以使用fgets()命令来完成此操作
我不能很容易地告诉你怎么做,因为我在手机上写下了这个答案
打开文件(已完成此操作)
将文件读入变量
而(!feof($fp))
{$var.=fgets($fp);}
你的标题读作“insert 1B”,1字节是什么意思?您尝试上载的文件有多大,以及它可以处理的列的类型/大小是多少
应该是$file=$\u FILES['image']['name']代码>。您已经在这里有了您的tmp声明$tmpName=$\u文件['image']['tmp\u名称']代码>。您是否尝试了$stmt->bindParam(':image',$file,PDO::PARAM_LOB)代码>是否也包含此注释?我在这里说的应该有用。对于你的第一个答案,请检查编辑。对于你的第二个答案,尝试了你放在那里的东西,没有工作,没有将文件保存到数据库中。插入LOB时,只需绑定一个文件指针,PDO就会从中读取。您不需要自己阅读整个文件。@jonathan我的回答是,在他的代码未能成功插入数据的情况下,提出的方法可以作为解决问题的替代方法,假设它与特定的文件流相关。
<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>