注意:unserialize():offset |时出错MySQL

时间:2016-09-22 13:52:52

标签: php mysql arrays symfony

我正在使用symfony 2,我有一个包含数组的实体,在MySQL数据库中,数组列生成为longtext utf8_unicode_ci列,注释为DC2Type:array

在查询实体的数据库时,我收到错误:

  

注意:unserialize():错误偏移894为902字节

     

500内部服务器错误 - ContextErrorException

我在SO上搜索了同样的错误,但我发现问题来自数据库中的列,看起来数组没有完全存储并被修剪,尽管longText类型的列可以最多可存储4千兆字节的数据。

有没有办法阻止数组被修剪? 而且还有推进。

1 个答案:

答案 0 :(得分:0)

对于那些试图提供帮助的人,但我发现了问题的来源,我在我的数组中有一个随机生成的令牌:

$commande['token'] = random_bytes(10);

当我尝试使用var_dump时,它是一个带有特殊字符的奇怪的随机字符串,所以我搜索了symfony2文档并发现了这个:

  

random_bytes()函数返回一个二进制字符串,该字符串可能包含\ 0字符。这可能会在几种常见情况下造成麻烦,例如将此值存储在数据库中或将其作为URL的一部分包含在内。解决方案是对random_bytes()返回的值进行编码或散列(为此,您可以使用简单的base64_encode()PHP函数)。

所以我添加了base64_encode()功能,但它确实有效。

$commande['token'] = base64_encode(random_bytes(10));