2013-05-20 261 views
0

嘿傢伙即時通訊在PDO中有點麻煩,因爲它返回的錯誤是一個未定義的索引。對於功能和查詢結果返回的代碼是這樣的:PHP數據庫PDO連接

function getUserDetails($user) { 
    $db = connect(); 
try { 
    $stmt = $db->prepare('SELECT name,addr AS address,team 
FROM TreasureHunt.Player LEFT OUTER JOIN TreasureHunt.MemberOf ON (name=player) 
LEFT OUTER JOIN TreasureHunt.PlayerStats USING (player) 
WHERE name=:user'); 

    $stmt->bindValue(':user', $user, PDO::PARAM_STR); 

    $stmt->execute(); 
    $results = $stmt->fetchAll(); 
    $stmt->closeCursor(); 

} catch (PDOException $e) { 
    print "Error : " . $e->getMessage(); 
    die(); 
} 
return $results; 
} 

但是運行的索引頁,我得到,說發現一個錯誤代碼時:未定義指數:命名

的程式碼索引是這樣的:

try { 
$details = getUserDetails($_SESSION['player']); 
echo '<h2>Name</h2> ',$details['name']; 
echo '<h2>Address</h2>',$details['address']; 
echo '<h2>Current team</h2>',$details['team']; 
echo '<h2>Hunts played</h2> ',$details['nhunts']; 
echo '<h2>Badges</h2>'; 
foreach($details['badges'] as $badge) { 
    echo '<span class="badge" title="',$badge['desc'],'">',$badge['name'],'</span><br />'; 
} 
} catch (Exception $e) { 
echo 'Cannot get user details'; 
} 

我的問題是爲什麼它會拋出通知,我該如何解決這個問題?

+0

'$ db = connect();'做什麼?你如何連接數據庫?錯誤的內容是什麼?你把太少的細節 – Robert

+1

檢查你使用'var_dump($ details);'得到了什麼。 **注意:**在echo語句中使用'.'(dot)&amp;不要用'',' – Rikesh

+0

concat可以拋出通知,因爲沒有正確的結果,並且在循環中使用'$ details ['badges']'等。這可能不會被分配。由於@Rikesh建議使用var_dump或print_r($ details)並顯示結果。 – Robert

回答

2

fetchAll返回所有結果(可能多行)在多維數組

array(
    0 => array(/* first row */), 
    1 => array(/* second row */), 
    ... 
) 

這就是爲什麼數組沒有直接索引'name',它需要[0]['name']
或者你不應該fetchAll,只是fetch

+0

完美的非常感謝:) – Indrick