Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP原则ArrayCollection反序列化错误_Php_Doctrine Orm_Deserialization - Fatal编程技术网

PHP原则ArrayCollection反序列化错误

PHP原则ArrayCollection反序列化错误,php,doctrine-orm,deserialization,Php,Doctrine Orm,Deserialization,我使用Doctrine的数组类型将这个字符串保存在数据库中 $test = unserialize('a:10:{s:4:"data";s:12:"registration";s:5:"order";s:4:"desc";s:5:"mySex";i:2;s:3:"sex";s:3:"all";s:6:"ageMin";i:36;s:6:"ageMax";i:46;s:9:"interests";O:43:"Doctrine\Common\Collections\ArrayCollection":

我使用Doctrine的数组类型将这个字符串保存在数据库中

$test = unserialize('a:10:{s:4:"data";s:12:"registration";s:5:"order";s:4:"desc";s:5:"mySex";i:2;s:3:"sex";s:3:"all";s:6:"ageMin";i:36;s:6:"ageMax";i:46;s:9:"interests";O:43:"Doctrine\Common\Collections\ArrayCollection":1:{s:53:"Doctrine\Common\Collections\ArrayCollectionelements";a:1:{i:0;O:41:"Singles\Bundle\UserBundle\Entity\Interest":4:{s:45:"Singles\Bundle\UserBundle\Entity\Interestid";N;s:50:"Singles\Bundle\UserBundle\Entity\Interestprofile";N;s:46:"Singles\Bundle\UserBundle\Entity\Interestsex";i:1;s:51:"Singles\Bundle\UserBundle\Entity\Interestactivity";i:0;}}}s:14:"onlyWithPhotos";b:1;s:8:"counties";N;s:9:"districts";N;}');
它总是抛出一个异常,并显示以下消息:

Notice: unserialize(): Error at offset 261 of 615 bytes
这正是此字符串末尾的分号:

。。。条令\公共\集合\阵列集合元素

什么会导致反序列化失败?每当我排除数组集合时,反序列化都会起作用。序列化是使用条令完成的,我不手动执行。

的输出是二进制字符串,可以包含空字节–例如\x00。反序列化失败,因为您正在传递该空字节的字符串,所以FQCN的字符串大小不匹配。如:

->大小设置为53: ->…阵列集合:1:{s:53:Doctrine\Common\C… ->但它是51: ->…阵列集合:1:{s:51:Doctrine\Common\C…
是否所有引用的实体仍然存在?@localheinz序列化的实体未在数据库中持久化,它们在字符串中的id为N NullThank!这就是解决方案!我在这里使用了一个函数-在取消序列化工作后修复元素的长度。@tomazahlin如果要避免此问题,可以在序列化,然后再取消序列化base64_解码。