所以这就是我现在遇到的麻烦
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 :(得分:0)
所以$p
是您的PDO声明。您只需要一次获取所有行:
$rows = $p->fetchAll();
然后$rows
将是一个包含所有行的数组。所以第一个是:
$rows[0]['teamname']
然后像往常一样遍历结果集:
foreach($rows as $player)
答案 1 :(得分:0)
$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());
您可以在循环之前从第一个结果行输出值,然后在第一次迭代中使用第一行时循环遍历所有其余行。
答案 2 :(得分:-2)
在您的示例中$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;
}
此外,查看示例中出现的异常会很有帮助。