反序列化问题

时间:2009-02-22 21:40:53

标签: php mysql serialization

我的脚本现在有另一个问题我现在已经使它更先进了,首先关闭计数功能无法正常工作并且它会出现此错误。

警告:array_push()[function.array-push]:第一个参数应该是第42行的C:\ wamp \ www \ social \ add.php中的数组

这是我的剧本:

$query = mysql_query("SELECT friends FROM users WHERE id='$myid'");
$friends = mysql_fetch_array($query);
$friends2 = unserialize($friends['friends']);

if (count($friends2) == 0) {

//option 1
$friends2 = array($id);
$friendsUpdated = serialize($friends2);
mysql_query("UPDATE users SET friends='$friendsUpdated' WHERE id='$myid'");

}else{

//option 2
array_push($friends2, $id);
$friendsUpdated = serialize($friends2);
mysql_query("UPDATE users SET friends='$friendsUpdated' WHERE id='$myid'");

4 个答案:

答案 0 :(得分:1)

似乎$friends2不是数组。使用var_dump($friends2)功能查看其值。

答案 1 :(得分:0)

这可能听起来不太有用,但您的数据库设计非常苛刻

为什么$ friends2不是数组?在获取数组之后尝试print_r()$ friends,看看你是否真的从数据库中获得了你想要的东西。

此外,您的计数检查是多余的。要添加到数组,只需转到$ friens2 [] = $ id;如果$ friends2为空,它只会创建一个包含1个元素($ id)的新数组,否则会添加它。

答案 2 :(得分:0)

你的问题包含答案: unserialize($ friends ['friends'])似乎返回非数组并且count($ friends2)不为零 - 这可能发生,例如,如果号码通过。你有没有试过检查$ friends ['friends']数据?最简单的方法是进行额外检查 is_array($ friends2)

答案 3 :(得分:0)

如果您在创建数据库之后但在将任何数据放入其中之前立即运行此代码,则“取消序列化($ friends ['friends']);”返回除数组之外的其他内容。可能是一个空字符串。因此在选项2中,您可能希望在array_push之前执行类似的操作:

if (!is_array($friends2)) {
  $friends2 = array();
}

这样,如果这个人在这一点上没有朋友(伤心......但是你会通过向他们推新朋友来修复它),一个空的朋友列表会被初始化。

另外,每当你在“if”条件的不同部分看到两行相同的代码时......

$friendsUpdated = serialize($friends2);
mysql_query("UPDATE users SET friends='$friendsUpdated' WHERE id='$myid'");

这是一个信号,您应该重新构建代码,以便您只有这些行的一个副本。