PHP数据库PDO连接

PHP数据库PDO连接,php,database,pdo,Php,Database,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=p

嘿,伙计们,我对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;  
}
但是,当运行索引页的代码时,我得到一个错误,上面写着Notice:Undefined index:name

索引的代码如下所示:

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';
}
试试看{
$details=getUserDetails($_会话['player']);
回显'Name',$details['Name'];
echo'Address',$details['Address'];
echo“当前团队”,$details[“团队];
echo'Hunts played',$details['nhunts'];
回声“徽章”;
foreach($details['badges']作为$badge){
回显“”,$badge['name'],“
”; } }捕获(例外$e){ echo“无法获取用户详细信息”; }

我的问题是,它为什么会抛出通知?我该如何解决这个问题?

fetchAll
返回多维数组中的所有结果(可能是多行):

这就是为什么数组没有直接索引
'name'
,它必须是
[0]['name']


或者你不应该
fetchAll
,只要
fetch

什么是
$db=connect()做什么?如何与db连接?错误的内容是什么?你把太少的细节用
var\u dump($details)检查你得到了什么。注意:在带有
(dot)&非由
的echo语句concat中,可能会抛出
通知,因为没有正确的结果,并且在循环中您使用的
$details['badges]
等可能未分配。正如@Rikesh建议使用var_dump或print_r($details)并显示结果一样。@Rikesh
echo
语句中更好,它使您将多个参数传递给
echo
,这些参数按顺序被回送出来。这比串接字符串然后回显它们更有效。@deceze-我从来不知道这一点。谢谢:)
array(
    0 => array(/* first row */),
    1 => array(/* second row */),
    ...
)