MySQL - 插入BLOB时出现服务器错误

时间:2016-01-07 19:07:30

标签: php mysql amazon-web-services amazon-ec2 ubuntu-14.04

在我的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/

问题是什么?

1 个答案:

答案 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

请尝试祝你好运