2010-04-14 57 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(),因爲除非您確定它是安全的,否則一定要確保以某種方式轉義您的查詢數據。