画像をアップロードしてBLOBとしてデータベースに格納しようとすると、PDOBで挿入するときにBlobが常に1Bを挿入する
私が使用するコードは別のテーブルに挿入するときに完全に機能するので、基本的には別の挿入クエリのコードを使用しました。
これは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>
これは私が画像を挿入した後、私は、データベースに見えるものです:
すべてが正常に挿入されていますが、一部のrではBLOBだけが挿入されませんeason。また、data-max-size
がなければ動作しません。
あなたのタイトルは「挿入1B」と読みますが、それは1バイトで何を意味しますか?アップロードしようとしているファイルのサイズはどれくらいですか?それが処理できる列のタイプ/サイズは何ですか? –
'$ file = $ _FILES ['image'] ['tmp_name'];は' $ file = $ _FILES ['image'] ['name']; 'でなければなりません。既に$ tmpName = $ _FILES ['image'] ['tmp_name']; 'というtmp宣言があります。あなたは '$ stmt-> bindParam( ':image'、$ file、PDO :: PARAM_LOB);'このコメントでも試しましたか?私がここで言ったことはうまくいくはずです。 –
あなたの最初の答えは、編集を確認してください。あなたの2番目の答えは、そこに置いたものを試してもうまくいかなかった – Rik