Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用PDO插入时,Blob始终插入1B_Php_Mysql_Pdo_Blob - Fatal编程技术网

Php 使用PDO插入时,Blob始终插入1B

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']

当我试图上传一张图片,然后将其作为一个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;
}
?>

您已经打开了一个指向您的文件的文件处理程序,并且正在将一个文件处理程序作为参数传递

尝试将文件处理程序引用的完整内容读入变量,并将该变量传递给准备好的语句。可以使用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>