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

时间:2016-10-15 00:22:21

标签: 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" (相反于null,如果我什么都不插入)。当我尝试查询数据时,它是零字节。这段代码适用于PHP 5,但我没有找到任何理由不能使用PHP 7。

2 个答案:

答案 0 :(得分:1)

切换到阅读内容并传递内容。

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

但是,在上传文件时,我遇到了有关内存的错误。> s> 20MB:

  

致命错误:允许的内存大小为134217728字节   (试图分配81606320字节)在 /var/www/app/API/docs.php   在线 498

答案 1 :(得分:0)

使用PHP增加内存使用量的方法:

ini_set('memory_limit','210M');

请注意,它已经分配了128M,并且它试图再分配80M - 是文件的大小吗?

根据需要调整init_set中的值。但是......如果MySQL在同一台服务器上,那么你应该向下调整它。 innodb_buffer_pool_size可能会进行调整。

请记住,交换对于性能而言非常糟糕。