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

Php 如何使用PDO插入压缩数据?,php,mysql,serialization,pdo,blob,Php,Mysql,Serialization,Pdo,Blob,我正在尝试使用PDO将一个大型序列化对象插入MySQL数据库。尝试直接插入会导致: PDOStatement::execute()[PDOStatement.execute]:SQLSTATE[08S01]:通信链路故障:1153获取的数据包大于“允许的最大数据包数”字节 似乎有几种可能的方法可以解决这个问题,但我的第一个策略是,将它从2383731字节降低到155955字节(使用压缩级别6)。但我现在很难插入结果,原因不同: PDOStatement::execute()[PDOStateme

我正在尝试使用PDO将一个大型序列化对象插入MySQL数据库。尝试直接插入会导致:

PDOStatement::execute()[PDOStatement.execute]:SQLSTATE[08S01]:通信链路故障:1153获取的数据包大于“允许的最大数据包数”字节

似乎有几种可能的方法可以解决这个问题,但我的第一个策略是,将它从2383731字节降低到155955字节(使用压缩级别6)。但我现在很难插入结果,原因不同:

PDOStatement::execute()[PDOStatement.execute]:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用接近“lob”值的正确语法(“
[此处出现一些二进制数据]

以下是代码的基本要点:

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

“全部”中的示例似乎使用的是文件流,而不是存储在字符串中的二进制数据,因此我不确定这是否有效。是否有人建议?

错误听起来像是需要在字段名周围添加反勾号:

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

获得了哪个值?请查看(已接受的答案)。不确定默认值是什么,但尝试将其设置为true和false,发现两者都有相同的错误。太好了!实际的列名是'all',但更改了此处的名称以保护无辜者-我自己的愚蠢之处在于忘记了
all
是一个。非常感谢。我被替换发布此内容,因为lob仅保留在oracle中但是很好:D