我试图使用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中的示例似乎都使用文件流而不是存储在字符串中的二进制数据,因此我不确定它是否有效。有人可以建议吗?
答案 0 :(得分:1)
错误听起来像你需要在字段名称周围添加反引号:
INSERT INTO saved (`lob`) VALUES (:value)