【问题标题】:PHP while loop loops everything except first query resultPHP while循环循环除了第一个查询结果之外的所有内容
【发布时间】:2016-12-23 23:43:38
【问题描述】:

我很难理解为什么 while 循环没有遍历第一个查询结果。

$pdo = new PDO('connection');
$stmt2 = $pdo->prepare("SELECT user FROM records
ORDER BY date DESC");

$stmt2->execute();
$r2 = $stmt2->fetch(PDO::FETCH_ASSOC);

while ($r2 = $stmt2->fetch(PDO::FETCH_ASSOC)) {
  echo '<tr><td>' . $r1['user'] . '</td></tr>';
}

我已阅读 this 线程,但它是 OOP。有什么建议吗?

【问题讨论】:

  • 啊不要两次获取数据!!并与$stmt2$stmt1 混淆
  • 首先,查看-&gt;execute()的返回值。如果是===FALSE,则查询失败,您应该检查$stmt-&gt;errorInfo()。也正如萨蒂所说,不要取两次。只在循环中获取。如果没有输出,则查询失败或数据库表为空(或只有一个条目被您在第一次提取时丢弃)。我什至忽略了$stmt1$stmt2 的混淆。该死。萨蒂,请接受我的投票。
  • 谢谢,它现在正在工作,但我使用$r1for not while 循环,例如echo $r1['user']。我想使用这样的东西:while ($r1 = $r1) 但它使我的页面崩溃。可以在while循环中以某种方式使用变量$r1吗?

标签: php sql pdo while-loop prepared-statement


【解决方案1】:

您已经通过$r1 = $stmt1-&gt;fetch(PDO::FETCH_ASSOC); 获取了第一条记录,并在while 循环中获取了其余记录。这应该工作 -

$stmt2->execute();

while ($r1 = $stmt2->fetch(PDO::FETCH_ASSOC)) {
  echo '<tr><td>' . $r1['user'] . '</td></tr>';
}

【讨论】:

  • 谢谢,它成功了。只是想知道是否可以在 while 循环中使用 fetch 变量?像下面这样:while ($row = $r1) { echo $row['user']; }?
  • 目前它也在做同样的事情。为什么需要这样做?
  • 因为如果我删除了第一个$r2 = $stmt2-&gt;fetch(PDO::FETCH_ASSOC);,那么其他查询将不会成功,例如这个:echo 'Player ' . $r2['user'];,它不在while循环中。我该怎么做?
  • 您正在运行单个查询。它应该打印所有行。
  • 它只在while循环中打印,这就是问题所在。
【解决方案2】:

那是因为您要获取它两次。删除 while 循环之前的 fetch

对于这样的事情,

$pdo = new PDO('connection');
$stmt2 = $pdo->prepare("SELECT user FROM records
ORDER BY date DESC");

$stmt2->execute();
while ($r1 = $stmt2->fetch(PDO::FETCH_ASSOC)) {
  echo '<tr><td>' . $r1['user'] . '</td></tr>';
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 2021-09-24
    • 2017-02-02
    • 1970-01-01
    相关资源
    最近更新 更多