[英]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.