我正在使用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。
答案 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
可能会进行调整。
请记住,交换对于性能而言非常糟糕。