插入PDO时Blob始终插入1B

时间:2016-11-09 19:08:08

标签: php mysql pdo blob

当我尝试上传图片然后将其作为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>

这是我插入图片后在数据库中看到的内容:

enter image description here

一切都插入正常,但由于某种原因只有BLOB不插入。也没有data-max-size它不起作用。

1 个答案:

答案 0 :(得分:-1)

您已打开指向文件的文件处理程序,并将文件处理程序作为参数传递。

尝试将文件处理程序引用的完整内容读入变量,并将该变量传递给预准备语句。您可以使用fgets()命令执行此操作。

因为我在手机上写这个答案,所以我无法轻易地告诉你如何操作。

  1. 打开文件(您已完成)
  2. 将文件读入变量  虽然(!feof($ fp)) {$ var。= fgets($ fp);}