登录时:
$result = mysql_query("SELECT `id`, `username`, `email` FROM `users`
WHERE `username` = '$username'
AND `password` = '$passwd'");
$userdata = array('id','username','email');
$_SESSION['user'] = mysql_result($result, 0, $userdata);
当我想打印用户名:
echo $_SESSION['user']['username']
它只打印第一个字母:/
怎么了?
答案 0 :(得分:1)
使用var_dump()在每个阶段调试变量,以确定问题所在。另外,以这种方式使用mysql_result是不必要的,我建议使用mysql_fetch_assoc(),因为它会以较少的努力做同样的事情。
答案 1 :(得分:0)
试试这个
$_SESSION['user']['id'] = mysql_result($result, 0, 'id');
$_SESSION['user']['username'] = mysql_result($result, 0, 'username');
$_SESSION['user']['email'] = mysql_result($result, 0, 'email');
还要确保数据库本身最初不包含第一个字母。
答案 2 :(得分:0)
我认为您可能希望使用mysql_fetch_assoc()代替mysql_result()。 mysql_result()
仅为您提供结果集中的单个单元格值,因此在分配$_SESSION['user'] = mysql_result($result,0,$userdata);
时,您只获得结果行的第一个单元格值。通过关联键(即$_SESSION['user']['username']
)访问它是不可能的,因为它不是数组。
如果您使用mysql_fetch_assoc()
,则您将拥有要使用的列名称和值的键/值对:
$result = mysql_query("SELECT `id`, `username`, `email` FROM `users`
WHERE `username` = '".mysql_real_escape_string($username)."'
AND `password` = '".mysql_real_escape_string($passwd)."'");
$_SESSION['user'] = mysql_fetch_assoc($result);
作为附带好处,mysql_fetch_assoc()
比mysql_result()
快得多。
注意:我还在其中添加了mysql_real_escape_string(),因为您必须确保以某种方式转义查询数据,除非您确定它是安全的。