将数组存储为PHP会话变量

时间:2012-03-16 17:05:14

标签: php arrays session

我的网站有一个用户列表,每个用户都是不同区域(组,位置等)的成员。我希望将数组变量存储在会话中,而不是每次想要创建列表时都进行数据库调用。

    //creates the array of groups that the user is in
    $_SESSION['gx']=mysql_query("SELECT * FROM `members` WHERE `user`='$user'");

现在我的页面加载并且session_start()运行。但是,当我的页面去检索该会话变量时,它不在那里。有什么建议吗?

由于

5 个答案:

答案 0 :(得分:4)

mysql_query的返回值无法序列化(存储到会话中)。但是你可以将结果拉出常规数组并序列化

$res = mysql_query("SELECT * FROM `members` WHERE `user`='$user'");
if ($res) {
    $_SESSION['gx'] = mysql_fetch_array($res);
}

警告:根据$user获取其值的位置,此代码可能容易受到SQL注入攻击。负责任地编码。

答案 1 :(得分:1)

mysql_query()不返回结果数组,它会返回一个可用于mysql_fetch_array()等的资源。

您必须先获取数据:

$res = mysql_query("SELECT * FROM `members` WHERE `user`='$user'") or die('Error!');

$_SESSION['gx'] = array();
while ( $arr = mysql_fetch_array($res, MYSQL_ASSOC) )
{
  $_SESSION['gx'][] = $arr;
}

我认为用户名是唯一的,因此您只需要拨打mysql_fetch_*()一次,例如:

$res = mysql_query("SELECT * FROM `members` WHERE `user`='$user'") or die('Error!');

$_SESSION['gx'] = mysql_fetch_array($res, MYSQL_ASSOC);

答案 2 :(得分:0)

mysql_query()返回一个ressource,你需要在这样的数组中获取这个ressource:

$query = mysql_query("SELECT * FROM `members` WHERE `user`='" . mysql_escape_string($user) . "'");
$_SESSION['gx'] = mysql_fetch_array($query, MYSQL_ASSOC);

此外,您还有潜在的安全漏洞。您可能希望使用mysql_escape_string()转义$ user以避免SQL注入。

答案 3 :(得分:0)

mysql_query()不返回数组,而是返回资源。首先从资源中获取值,然后将结果存储在会话中。

答案 4 :(得分:0)

您正在执行查询,但正在返回资源,而不是结果。如果需要数据,则需要获取数组。

$_SESSION['gx']=mysql_fetch_array(mysql_query("SELECT * FROM `members` WHERE `user`='$user'"));