我的数据库中有一个“招聘人员”表,它有不同的属性,其中一个是“专业”。"Professions"
是一个序列化数组,我从一个多选表单中获取。这个很好用。
当我取消序列化这个属性时,不会打印任何内容-没有错误,没有文本。
这是我测试序列化时使用的代码:
$sql = 'SELECT Company_name, Status, Size, Professions, Seniority_levels, Sector, Website, Location FROM Recruiter';
$query = mysql_query($sql, $con);
while($result = mysql_fetch_array($query, MYSQL_BOTH)){
$recruiters[] = array($result[0], $result[1], $result[2], $result[3], $result[4], $result[5], $result[6], $result[7]);
}
foreach($recruiters AS $recruiter){
$test = unserialize($recruiter[3]);
echo $test[0].'<br>';
}
所以基本上$test[0]不打印任何内容,尽管打印了新行。请帮忙!
最佳答案
test = unserialize($recruiter[3]);
应该变成test = unserialize($recruiter[5]);
,因为扇区字段是第六列。
但是,如果将来某个地方需要选择扇区等于smth的行呢?然后序列化谁帮你,所以我建议你看一个不同的实现,这个扇区文件名为bitwizehttp://www.litfuel.net/tutorials/bitwise.htm
编辑
当您点击右边的列并且该列包含a:1:{i:0;s:27: a:1:{i:0;s:27: a:38:{i:0;s:27: a:9:{i:0;s:39:
时,看起来序列化数组没有完全保存在您的db中,它只是其中的一部分。所以不返回数组的unserialize函数。看看mysql字段的长度,我假设您已经将它设置得比需要的要小,所以您的数据在插入/更新时被修剪。
编辑a:1:{i:0;s:27:
仍然缺少序列化数组的其余部分。s:27:
意味着一个字符串在包含27个字符的后面,并且当它看起来像a:1:{i:0;s:27:"123456789012345678901234567";}
(a:1
表示包含1个值的数组,其内容介于{}
之间,i:0;
表示数组键0,s:27:"";
表示包含27个字符的字符串作为i:0
键的值)。
关于php - PHP MYSQL unserialize()问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6799132/