2013-05-20 8 views
0

Эй, ребята, у которых небольшая проблема с PDO в php, поскольку возвращаемая ошибка является неопределенным индексом. Код функции и запроса и возврата результата заключается в следующем: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();' do? Как вы связываетесь с db? Каково содержание ошибки? Вы ставите слишком мало деталей. – Robert

+1

Проверьте, что вы получаете, используя 'var_dump ($ details);'. ** Примечание: ** В выражении echo concat с '.' (dot) & not by', ' – Rikesh

+0

Уведомление может быть вызвано, потому что нет правильных результатов, и в цикле вы используете' $ 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

Смежные вопросы