Php 非序列化问题
我的scripy还有另一个问题,现在我已经使它更高级了,首先,计数函数不能正常工作,它给出了这个错误 警告:array_push()[function.array push]:第一个参数应该是第42行C:\wamp\www\social\add.php中的数组 这是我的剧本:Php 非序列化问题,php,mysql,serialization,Php,Mysql,Serialization,我的scripy还有另一个问题,现在我已经使它更高级了,首先,计数函数不能正常工作,它给出了这个错误 警告: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); $frie
$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'");
似乎
$friends2
不是数组。使用var\u dump($friends2)
函数查看它的值。这听起来可能没有什么帮助,但您的数据库设计非常有用
为什么$friends2不是数组?在获取一个数组后,尝试打印_r()$friends,看看是否首先从数据库中获得了所需的内容
此外,您的计数检查是多余的。要添加到数组,只需转到$friens2[]=$id;如果$friends2为空,它将只生成一个包含1个元素($id)的新数组,否则它将添加它。您的问题包含答案:unserialize($friends['friends'])似乎返回非数组,count($friends2)不是零-例如,如果传递了数字,则可能会发生这种情况。您是否尝试检查$friends['friends']数据?最简单的方法是进行额外检查,如果您在创建数据库后立即运行此代码,但在将任何数据放入其中之前,“unserialize($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'");
这是一个信号,你应该重新构造你的代码,这样你就只有一个这些行的副本。然后看看手册,在这种情况下,unserialize返回false:感谢所有回答的人:)我的代码现在已经完全运行了:DGreat to hear!您可能还希望通过单击左侧的大复选标记来指定您最喜欢的答案。