Php PDO Blob插入缺少的数据

Php PDO Blob插入缺少的数据,php,mysql,pdo,insert,blob,Php,Mysql,Pdo,Insert,Blob,我正在利用phantom捕获图像,然后将它们上传到一个集中式MySQL数据库 我遇到的问题是,它一直在切断我尝试和推送的每个文件的结尾。不管是.pdf、.png、.docx、.xlsx还是。。。它切断了文件的一部分,从而破坏了它。奇怪的是,它总是从每个文件中删除相同数量的内容 我的SQL插入代码是: $put_linkdata = $DBW->prepare('INSERT `'.$tableD.'` SET captured = :capture_

我正在利用phantom捕获图像,然后将它们上传到一个集中式MySQL数据库

我遇到的问题是,它一直在切断我尝试和推送的每个文件的结尾。不管是.pdf、.png、.docx、.xlsx还是。。。它切断了文件的一部分,从而破坏了它。奇怪的是,它总是从每个文件中删除相同数量的内容

我的SQL插入代码是:

$put_linkdata = $DBW->prepare('INSERT `'.$tableD.'` SET
                    captured = :capture_time,
                    error = :eYN,
                    link = :link,
                    image = :image,
                    html = :html,
                    `text` = :plaintext,
                    file = :file,
                    mimetype = :mimetype');

                $put_linkdata->bindValue(':capture_time', date('Y-m-d H:i:s',$record['timestamp']));
                $put_linkdata->bindValue(':link', $item['url']);
                $put_linkdata->bindValue(':mimetype', $record['mimetype']);
                $put_linkdata->bindParam(':eYN', $record['error'], PDO::PARAM_STR);
                $put_linkdata->bindParam(':image', $record_child['image'], PDO::PARAM_LOB);
                $put_linkdata->bindParam(':plaintext', $record_child['text'], PDO::PARAM_LOB);
                $put_linkdata->bindParam(':html', $record_child['html'], PDO::PARAM_LOB);
                $put_linkdata->bindParam(':file', $record_child['file'], PDO::PARAM_LOB);

                if($put_linkdata->execute()){
                    $linkData_record['id'] = $DBW->lastInsertId();
                    print PHP_EOL.mb_strlen($record_child['image'], '8bit');
                    print PHP_EOL.PHP_EOL.'~~~~~~~~~~~~~~~~~~~~~~~~~~~'.PHP_EOL.PHP_EOL;
                    die();
                }
                else{
                    throw New Exception('Error inserting linkdata record into archive - SQL error "'.$put_linkdata->queryString.'"'.PHP_EOL.PHP_EOL.$put_linkdata->errorInfo());
                }
在此之前,我已经运行了大量的测试和所有操作,数据仍然保持完整性,如果我使用file_put_contents(),它与捕获的图像或文件是相同的

举一个图片的例子,拉google.com给我一个25K的图片,但是上传的是17.2K。一个55K的pdf正在以40.7K上传。另一个pdf是1.5MB,但上传速度是1.1MB。当我将文件与db blob区分开来时,db中的blob缺少文件底部的内容

文件的大小和内容不一致,但对于相同的捕获是一致的

有人有什么想法吗

更新 我已经把范围缩小到准备好的语句和上传之间发生的事情


此外,在使用预处理语句时,PDO和MySQLI中都会发生这种情况。第一个假设是某个地方的字符集编码不正确,但所有内容都被定义为UTF8(数据库、表、PDO连接、配置文件)。

发现问题后,这篇文章现在看起来相当愚蠢,但万一将来有人遇到这个问题


PHPMyAdmin的旧版本有一个错误,它不能在blob列中正确显示或下载数据。

我猜blob不够大,无法容纳数据。试试MEDIUMBLOB或LONGBLOB。我以前也回答过类似的问题,就是这样;列类型太小。它实际上是一个LONGBLOB列,但我尝试将其更改为MEDIUM和BLOB,以查看它是否与PDO和BLOB的大小有关。这两个更改都不起作用,即使是BLOB,25K仍然在该范围内。脚本是否在完成BLOB上载之前超时?没有任何内容超时。在上传之前准备声明似乎有些问题。$record\u child['image']和$record\u child['file']变量已经是相同的数据流,就好像它们是file\u get\u内容一样。据我所知,无论是PDO还是MySQLI,使用准备好的查询将任何blob对象传递给我的数据库都会导致它丢失数据。感谢lilbnyfufu分享您的答案。我过去也遇到过类似的问题。从那以后,我就不再使用Blob了。相反,我将文件上传到一个文件夹,并将文件名或URL存储到我的数据库中。这样,我知道数据库返回值的速度也更快了。