php - 如何使用 PHP 7 和 MySQL 将文件从 POST 插入到 longblob 列中?

标签 php mysql pdo mariadb

我使用 PHP 7 和 MariaDB 5.5.47(在 CentOS 7 上),以下代码成功执行,没有错误:

$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”(而不是空,如果我什么都不插入)。当我尝试查询数据时,它是零字节。该代码适用于 PHP 5,但我还没有找到它不适用于 PHP 7 的任何原因。

最佳答案

切换到读取内容并将其传递到工作中。

$fp = fopen($tmp_name, 'rb');
$content = fread($fp, filesize($tmp_name));
// ...
$statement->bindParam(2, $content, PDO::PARAM_LOB, $size);

但是,在上传大于 20mb 的文件时,我遇到了有关内存的错误:

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 - 如何使用 PHP 7 和 MySQL 将文件从 POST 插入到 longblob 列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40053736/

相关文章:

php - 如何在 LIMIT 子句中应用 bindValue 方法?

php - 使用另一个表的结果从成员表中提取成员的名字

mysql - 由于外键约束,无法删除现有的唯一键

php - 如何使用 PHP、MySQL 和 Google Charts 工具在折线图 drwan 中绘制多条线?

php - 使用一个查询更新多行

javascript - JQuery 中的引用列表项

mysql - 列 'PostedVoucher.stat_flag' 在选择列表中无效,因为它未包含在聚合函数或 GROUP BY 子句中

mysql - PDO:从包含反斜杠的数据库中选择字段

php - 将 PHP 对象设置为全局?

javascript - 在 php 中获取 Bootstrap slider 的值?