大家好我在这里遇到紧急情况。我的代码工作了一段时间,突然间出现了一些错误,我不知道是什么!我通过序列化它然后在其上运行base64_encode将对象存储在我的数据库中。结果是一个编码的序列化字符串,当我想要检索时,我只是解码并取消序列化。
它一直工作正常,但突然间我不知道为什么 - 每当我尝试运行插入的部分时 - 它正确地编码对象但是在运行sql查询之后 - 最终在数据库中的值是一个截断的混乱!!!!
如果我手动复制将编码字符串粘贴到它复制的字段并插入正常,则不是数据库问题。
我不知道最新情况 - 下面的代码是我如何进行更新:
$personsTable = new ZFltData_Db_Table(array('name'=>'people'));
$where = $personsTable->getAdapter()->quoteInto('id = ?', $id);
$data['object'] = base64_encode(serialize($obj));
$personsTable->update($data, $where);
数据库字段实际上是一个longText。
编辑==== 抱歉,那个。加密的字符串看起来像这样:
YToyOntpOjA7YTozOntzOjg6ImNhdGVnb3J5IjtzOjU6InBob25lIjtzOjQ6InR5cGUiO3M6NDoiV29yayI7czo3OiJkZXRhaWxzIjtzOjEzOiIxMjMzIDQzNTQzNTQ1Ijt9aToxO2E6Mzp7czo4OiJjYXRlZ29yeSI7czo1OiJwaG9uZSI7czo0OiJ0eXBlIjtzOjQ6IkhvbWUiO3M6NzoiZGV0YWlscyI7czoxNzoiMTAwOTEyIDgwOTgxMjkwMTIiO319
如果我使用Navicat explorer手动将其粘贴到数据库中,就会这样。
然而,执行时的代码最终只会在数据库中放入以下内容:
Tjs=
奇怪的是,无论编码对象的内容是什么,这都是输入的...对象实际上是一个关联数组...这里有什么不对吗?它工作正常,直到......今天......
答案 0 :(得分:3)
Tjs=
base64_decodes to N;
,这是null
的序列化表示。
因此,$obj
在您序列化它的脚本中是null
,而不是关联数组。
这是不可能的,因为我们不知道$ obj来自哪里。如果您正在使用脚本进行更深入的操作,请进行print_r()
测试以查看它是否在某处被覆盖。