While 循环仅显示数据库中的第一行

Posted

技术标签:

【中文标题】While 循环仅显示数据库中的第一行【英文标题】:While loop only display first row from database 【发布时间】:2019-09-27 14:35:49 【问题描述】:

我知道这是一个超级基本的问题,但我一整天都找不到答案。 我试图在一个表中显示我所有的数据库行,而我的 while 循环只显示第一行。

我尝试将 while 循环的条件更改为“mysqli_fetch_array”,然后甚至第一行都没有出现。

echo "<table>";
    echo "<tr>
        <th>Match_Id</th>
        <th>Home_Team</th> 
        <th>Away_Team</th>
        <th>Result</th>
        <th>season</th> 
        <th>notes</th>
        <th>Goals_Sum</th>
      </tr> ";


     $sql = "SELECT * FROM PremierLeague";
   `enter code here`  $result = sqlsrv_query($conn, $sql);

 while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) 
     echo "<tr>";
     $id = $row['id'];
     echo "<td>$id</td>";
     $Home = $row['Home'];
     echo "<td>$Home</td>";
     $Away = $row['Away'];
     echo "<td>$Away</td>";
     $result = $row['result'];
     echo "<td>$result</td>";
     $season = $row['season'];
     echo "<td>$season</td>";
     $notes = $row['notes'];
     echo "<td>$notes</td>";
     $home_goals= $row['home_goals'];
     $away_goals= $row['away_goals'];
     $GoalSum = $home_goals+$away_goals;
     echo "<td>$GoalSum</td>";
     echo "</tr>";
 
  echo "</table>";

预期结果:包含数据库中所有行的表。 实际结果:只有数据库的第一行

【问题讨论】:

你为什么首先使用while循环?这是为循环设计的问题。 你能举个例子,我如何用 for 循环做到这一点? 您的代码有语法错误。您粘贴正确了吗? 【参考方案1】:
echo "<table>";
    echo "<tr>
        <th>Match_Id</th>
        <th>Home_Team</th> 
        <th>Away_Team</th>
        <th>Result</th>
        <th>season</th> 
        <th>notes</th>
        <th>Goals_Sum</th>
      </tr> ";


     $sql = "SELECT * FROM PremierLeague";
  $result = sqlsrv_query($conn, $sql);

 while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) 
            $id = $row['id'];
          $Home = $row['Home'];
          $Away = $row['Away'];     
        $result = $row['result'];
       $season = $row['season'];
       $notes = $row['notes'];
     $home_goals= $row['home_goals'];
     $away_goals= $row['away_goals'];
     $GoalSum = $home_goals+$away_goals;



 echo $output.="<tr>
                 <td>$id</td>
                 <td>$Home</td>
                 <td>$Away</td>
                 <td>$result</td>
                 <td>$season</td>
                 <td>$notes</td>
                 <td>$GoalSum</td>
                </tr>";
 
  echo "</table>";

【讨论】:

我做了,但这是一个错误,所以我删除了它。为此事道歉。但是,我看不出你的提议与 OP 有什么不同…… 复制了你的代码,仍然只显示一行。 while循环中的条件ok吗? 从 while 循环中删除 SQLSRV_FETCH_ASSOC 并尝试一下。 没有改变任何东西【参考方案2】:

您的代码示例乍一看很干净,但这仍然让我想起两种不同的可能性:

您的表只包含一行。这很愚蠢,但必须先检查。好吧,我想你做到了; 一个无关的分号“;”在while() 条件后被遗忘:
    while($res=fetch(…));
    
        display something…
    

在这种情况下,循环将迭代直到数据集结束,然后将输入大括号中的块(假定为孤立块),显示变量中剩余的内容。但在这种情况下,您应该得到查询的最后行,而不是第一行。

【讨论】:

1.我的表包含多于一行。 2.确定它显示第一行,所以它不是分号,即使我尝试添加它然后没有出现任何行。

以上是关于While 循环仅显示数据库中的第一行的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 仅适用于第一次从 php 中的 while 循环中获取数据

While 循环在 Bash 的第一行之后停止读取

Php - While [data] 循环,$Post 仅返回第一个值

结果集在while循环中仅迭代一次

Shell while循环语句中的陷阱

jQuery 数据表仅显示一行,但 JSON 包含所有记录