繁体   English   中英

将数组存储为PHP会话变量

[英]Storing Arrays as PHP Session Variables

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

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

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

谢谢

mysql_query的返回值不能被序列化(存储到会话中)。 但是,你可以拉出来的结果定期阵列和序列化:

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

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

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);

mysql_query()返回一个资源,您需要在这样的数组中获取该资源:

$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注入。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM