在我的PHP应用程序中,用户可以选择上传文件,该文件将存储在MySQL数据库的表中。
在Windows实例上的XAMPP上,这很好用。但是,在AWS EC2 Ubuntu上,当表单与选定文件一起提交时,Web浏览器会出现 “服务器错误500网站在检索时遇到错误。它可能因维护失败或配置不正确。“
我最初检查了my.cnf
文件中的max_allowed_packet
大小,但这似乎很好,因为它默认设置为16MB,但是我觉得它与Apache服务器本身并不喜欢上传BLOB。
以下是处理将BLOB插入表中的PHP代码:
//execute stored proc. to upload attachment
$null = null;
$query = $this->connection->prepare("CALL sp_PopulateAbstractAttachments(?,?,?,?,?)");
$query->bind_param("ibssi", $abstractID, $null, $name, $type, $size) or die(mysqli_error($this->connection));
foreach (str_split($attachment, 10240) as $chunk)
{
$query->send_long_data(1, $chunk);
}
$query->execute() or die(mysqli_error($this->connection));
$query->close();
就像我说的,这在XAMPP Windows上完全正常,但在AWS EC2 Ubuntu上却没有。可能导致这个问题的原因是什么?
修改
根据Apache的错误日志,这就是问题所在:
[Thu Jan 07 19:24:24.571319 2016] [:error] [pid 12049] [客户 XXX.XXX.XXX.XXX:XXXXX] PHP致命错误:在/var/www/html/app/models/Abstracts.php中调用非对象上的成员函数bind_param() 在第40行,引用者: http://XXXXXXXXXXX/public/index.php?url=home/submitAbstract/
问题是什么?
答案 0 :(得分:0)
您好,这里有一个小例子
if (isset($_FILES['image']) && $_FILES['image']['size'] > 0)
{
$tmpName = $_FILES['image']['tmp_name'];
$fp = fopen($tmpName, 'rb'); // read binary
}
try
{
$stmt = $conn->prepare("INSERT INTO images ( picture ) VALUES ( ? )");
$stmt->bindParam(1, $fp, PDO::PARAM_LOB);
$conn->errorInfo();
$stmt->execute();
}
catch(PDOException $e)
{
'Error : ' .$e->getMessage();
}
有关详细信息,请查看此链接并查找示例
insert with pdo php mysql blob
请尝试祝你好运