Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 非序列化问题_Php_Mysql_Serialization - Fatal编程技术网

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

我的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);
$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!您可能还希望通过单击左侧的大复选标记来指定您最喜欢的答案。