带会话的数组,只打印一个字母

时间:2010-04-14 04:50:26

标签: php arrays

登录时:

$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']

它只打印第一个字母:/

怎么了?

3 个答案:

答案 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(),因为您必须确保以某种方式转义查询数据,除非您确定它是安全的。