2010-04-14 56 views
0

在登录:阵列会话,只打印一个字母

$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

@jolabero:欢迎来到SO。您通常可以通过用您使用的语言标记问题来获得更快速的帮助。祝你好运。 – bernie 2010-04-14 04:57:49

回答

1

通过使用var_dump()来确定问题出在哪里,在每个阶段调试变量。此外,以这种方式使用mysql_result是不必要的,我建议使用mysql_fetch_assoc(),因为它可以用较少的工作完成同样的事情。

+0

同意丹顿 – 2010-04-14 05:01:55

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

也确保数据库本身并不只包含第一个字母开始。

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