How can I insert file from POST into longblob column using PHP 7 and MySQL?(如何使用 PHP 7 和 MySQL 将文件从 POST 插入 longblob 列?)
问题描述
我正在使用 PHP 7 和 MariaDB 5.5.47(在 CentOS 7 上)并且以下代码成功执行,没有错误:
I'm using PHP 7 and MariaDB 5.5.47 (on CentOS 7) and the following code successfully executes, with no errors:
$id = 3;
$tmp_name = $_FILES['file']['tmp_name'];
$fp = fopen($tmp_name, 'rb');
$statement = $db->prepare("INSERT INTO Foo (id, data) VALUES (?, ?)");
$statement->bindParam(1, $id);
$statement->bindParam(2, $fp, PDO::PARAM_LOB);
$statement->execute();
$statement->closeCursor();
close($fp);
使用 MySQL WorkBench 它显示数据"列是BLOB"(与 null 相反,如果我什么都不插入).当我尝试查询数据时,它是零字节.这段代码适用于 PHP 5,但我没有找到任何原因说明它不能适用于 PHP 7.
Using MySQL WorkBench it shows the "data" column is "BLOB" (as opposed to null, in the event I insert nothing). When I try to query the data, it's zero bytes. This code worked with PHP 5, but I haven't found any reason why it wouldn't work with PHP 7.
推荐答案
切换到阅读内容并将其传入工作.
Switching to reading the content and passing that in worked.
$fp = fopen($tmp_name, 'rb');
$content = fread($fp, filesize($tmp_name));
// ...
$statement->bindParam(2, $content, PDO::PARAM_LOB, $size);
但是,我在上传大于 20mb 的文件时遇到了内存错误:
However, I run into errors about memory when uploading a file that's > 20mb:
致命错误:允许的内存大小为 134217728 字节已用尽(试图分配 81606320 字节)在 /var/www/app/API/docs.php在线 498
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 81606320 bytes) in /var/www/app/API/docs.php on line 498
这篇关于如何使用 PHP 7 和 MySQL 将文件从 POST 插入 longblob 列?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何使用 PHP 7 和 MySQL 将文件从 POST 插入 longblob 列?
基础教程推荐
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- 在多维数组中查找最大值 2021-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- 超薄框架REST服务两次获得输出 2022-01-01