我的网站有一个用户列表,每个用户都是不同区域(组,位置等)的成员。我希望将数组变量存储在会话中,而不是每次想要创建列表时都进行数据库调用。
//creates the array of groups that the user is in
$_SESSION['gx']=mysql_query("SELECT * FROM `members` WHERE `user`='$user'");
现在我的页面加载并且session_start()运行。但是,当我的页面去检索该会话变量时,它不在那里。有什么建议吗?
由于
答案 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'"));