Так вот с чем у меня проблемы сейчас

try {
    $p = $pdo->query('SELECT * FROM players INNER JOIN teams ON players.teamid = teams.id WHERE players.teamid = 1');
}
catch (PDOException $e) {
    echo 'Error fetching list of players!';
    exit();
}

Я понимаю, что в этом коде нет ничего плохого. Я использую цикл foreach с таблицей для отображения всех игроков #, имен и позиций, которые они заключены в <tr> <td> </td> </tr>

foreach($p as $player){
    echo $player['jersey'];
    echo $player['playername'];
    echo $player['position'];
}

Эта часть тоже работает хорошо, у меня проблемы с выполнением, это поверх этой таблицы, чтобы отображать внутри тегов заголовков что-то вроде этого, я пробовал это и получил сообщение об ошибке

<h1><?php $p['teamname']; ?></h1>

Если я использую fetch, он удаляет первого игрока из цикла

$row = $p->fetch();
0
Christopher Ortiz 23 Дек 2015 в 15:30

3 ответа

Лучший ответ

Итак, $p - это ваш оператор PDO. Вам просто нужно получить сразу все строки:

$rows = $p->fetchAll();

Тогда $rows будет массивом, содержащим все строки. Итак, первый:

$rows[0]['teamname']

Затем вы просматриваете набор результатов как обычно:

foreach($rows as $player)

0
Keyne Viana 23 Дек 2015 в 13:21

В вашем примере $p - это ваш запрос. Запрос представляет собой массив элементов результата. Следовательно, если вы хотите получить доступ к свойству teamname, вам необходимо получить доступ к элементу, а не к запросу в целом.

В вашем случае это будет:

$p[0]['teamname'];

Но поскольку может случиться так, что в одной команде не было ни одного игрока, гораздо более чистым решением было бы запустить совершенно новый запрос только для имени команды.

try {
    $p = $pdo->query('SELECT * FROM teams WHERE players.teamid = 1');
}
catch (PDOException $e) {
    echo 'Error fetching team name!';
    exit();
}

if(count($p) != 1)
{
    //Handle error in case team doesn't exist
}
{
    $teamname = $p[0]["teamname"];
    echo $teamname;
}

Кроме того, было бы полезно увидеть исключение, которое возникло в вашем примере.

-2
user2846639 23 Дек 2015 в 12:48

$p - это PDOStatement, который представляет весь ваш запрос и набор результатов. 'teamname' - это только столбец в одной из строк результатов, а не свойство в самом $p. Вам нужно получить строку и прочитать оттуда значение. Однако, если вы затем захотите перебрать все строки, включая ту, которую вы уже выбрали, лучшая языковая конструкция для этого - do..while:

$row = $p->fetch();

echo $row['teamname'];  // outputs column of first row

do {
    echo $row['jersey'];
    ...
} while ($row = $p->fetch());

Вы можете вывести значения из первой строки результата перед циклом, а затем перебрать все остальные, используя эту первую строку в первой итерации.

0
deceze 23 Дек 2015 в 13:30