如何使用PDO插入压缩数据?

时间:2014-07-09 22:12:05

标签: php mysql serialization pdo blob

我试图使用PDO将大型序列化对象插入MySQL数据库。试图直接插入给出:

PDOStatement::execute() [pdostatement.execute]: SQLSTATE[08S01]: Communication link failure: 1153 Got a packet bigger than 'max_packet_allowed' bytes

似乎有一些可能的方法可以解决这个问题,但我的第一个方法是gzcompress,将其从2383731降低到155955字节(使用压缩级别6)。但我现在正在努力以不同的理由插入结果:

PDOStatement::execute() [pdostatement.execute]: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'lob) VALUES (' [此处发布了一些二进制数据] '

这是代码的基本要点:

  $value = gzcompress(serialize($lob));
  $stmt = $conn->prepare("INSERT INTO saved (lob) VALUES (:value)");
  $stmt->bindParam(':value', $value, PDO::PARAM_LOB);
  $stmt->execute();

documentation中的示例似乎都使用文件流而不是存储在字符串中的二进制数据,因此我不确定它是否有效。有人可以建议吗?

1 个答案:

答案 0 :(得分:1)

错误听起来像你需要在字段名称周围添加反引号:

INSERT INTO saved (`lob`) VALUES (:value)