我正在使用symfony 2,我有一个包含数组的实体,在MySQL数据库中,数组列生成为longtext utf8_unicode_ci
列,注释为DC2Type:array
。
在查询实体的数据库时,我收到错误:
注意:unserialize():错误偏移894为902字节
500内部服务器错误 - ContextErrorException
我在SO上搜索了同样的错误,但我发现问题来自数据库中的列,看起来数组没有完全存储并被修剪,尽管longText
类型的列可以最多可存储4千兆字节的数据。
有没有办法阻止数组被修剪? 而且还有推进。
答案 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));