【问题标题】:PHP : Getting one value from a PDO queryPHP:从 PDO 查询中获取一个值
【发布时间】:2015-12-29 17:20:29
【问题描述】:

这就是我现在遇到的问题

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();

【问题讨论】:

  • $rows = $p->fetchAll();然后 $rows[0]['teamname']... 然后循环遍历结果 foreach($rows as $player)
  • 展示你如何使用fetch!!
  • @KV。谢谢,这就像一个魅力。一个问题只是让我可以从中学习,为什么 $rows[0] 在没有任何显示的情况下进行这项工作?让我换个说法,如果没有 [0] 索引 0,$rows['teamname'] 就无法工作。
  • $rows[0] 是在fetchAll() 中提取的第一行,然后从该行返回['teamname']。您可以通过更改数字来指定其他行。
  • @JayBlanchard 感谢 jay forgot fetch 获取行而不仅仅是结果

标签: php html mysql pdo


【解决方案1】:

所以$p 是您的 PDO 声明。您只需要一次获取所有行:

$rows = $p-&gt;fetchAll();

那么$rows 将是一个包含所有行的数组。所以第一个是:

$rows[0]['teamname']

然后你像往常一样遍历结果集:

foreach($rows as $player)

【讨论】:

  • 请注意,如果您的结果集很大,fetchAll 的成本可能会非常高。一次获取一行要好得多。
【解决方案2】:

$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());

您可以在循环之前从第一个结果行输出值,然后遍历所有其余行,同时在第一次迭代中使用第一行。

【讨论】:

    【解决方案3】:

    在您的示例中,$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;
    }
    

    此外,查看示例中出现的异常会很有帮助。

    【讨论】:

    • 您仍然需要获取结果才能访问数据。
    • 在我的示例中,我收到了一个致命错误:不能使用 PDOStatement 类型的对象作为数组,所以我相信 $p[0]['teamname'] 会抛出同样的错误。
    猜你喜欢
    • 1970-01-01
    • 2016-10-06
    • 2015-04-26
    • 1970-01-01
    • 2019-04-03
    • 2012-10-17
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    相关资源
    最近更新 更多