【问题标题】:PHP MYSQL unserialize() issuesPHP MYSQL 反序列化()问题
【发布时间】:2011-07-23 08:07:43
【问题描述】:

我的数据库中有一个“recruiter”表,它具有不同的属性,其中之一是“Professions”。 "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] 虽然打印了新行,但什么也没打印。请帮忙!

【问题讨论】:

  • 这是在数据库中存储序列化数据时遇到的一种麻烦。尝试更改表的结构。
  • 对不起,专业不是部门。固定。

标签: php mysql serialization


【解决方案1】:

尝试打印 $test 数组以及 $recruiters 和 $recruiter 数组。在反序列化数据之前查看结果是否正常。如果查询返回任何数据。还可以尝试使用 mysql_fetch_assoc 的 while 循环。让我知道结果,如果这能解决问题

【讨论】:

  • 打印 $test = $recruiter[3],所以数组给了我:a:1:{i:0;s:27: a:1:{i:0;s:27: a:38:{i:0;s:27:a:9:{i:0;s:39:
  • hmmmm...这很奇怪...请您尝试打印 unserialize($recruiter[3]);我认为问题可能是您创建的数组可能没有 $test[0] 而是有类似 $test[1]; 的东西。所以打印 $test 的非序列化结果,看看有什么结果告诉我。
  • 警告:第 70 行 /srv/disk7/783806/www/piotrchabros.pl/results.php 中 mysql_fetch_assoc() 的参数计数错误
  • 尝试打印未序列化的 $test 而不是 $test[0];
  • Printing unserialize($recruiter[3]) 什么也不打印。
【解决方案2】:

test = unserialize($recruiter[3]); 应该变成test = unserialize($recruiter[5]);,因为扇区字段是第六列。

但是,如果将来某个地方您可能需要选择扇区等于 smth 的行怎么办?序列化谁对你没有帮助,所以我建议你看看扇区提交的女巫的不同实现称为 bitwize http://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:,看起来序列化的数组没有完全保存在您的数据库中,它只是其中的一部分。所以反序列化函数不会返回一个数组。看看 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键的值) .

【讨论】:

  • 对不起专业,不是部门。没有反序列化的打印测试也给我 a:1:{i:0;s:27: a:1:{i:0;s:27: a:38:{i:0;s:27: a:9: {i:0;s:39:
  • 不,你弄错了。它打印 4 次结果,因此一列包含 a:1:{i:0;s:27:,另一列包含 a:1:{i:0;s:27: 等。
  • 不,我没听错,看最后一次编辑。请检查您的专业 mysql 字段的长度。
  • 好吧,也许我的数据库有问题? Professions 属性设置为“文本”,没有设置“最大长度”。
  • 好的,谢谢你,我知道问题出在哪里,我现在知道我应该如何处理它。感谢您的帮助,您的回答将被批准:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
相关资源
最近更新 更多