php for循环未返回所有值,为什么?

时间:2019-09-04 22:08:50

标签: php for-loop mysqli

我今天开始学习PHP和数据库。

到目前为止,我一直在尝试和工作的是使用简单的 updateScores.php 文件从数据库访问信息。

DB高分:


  names  | scores |
___________________
 player1 |  20    |

 player2 |  69    |

我的代码:

$host="localhost";
$database="players";
$user="root";
$password = "";
$error = "Cant connect";

$con = mysqli_connect($host, $user, $password);
mysqli_select_db($con, $database) or die("Unable to connect!");

$query = "SELECT * FROM high_scores";
$result = mysqli_query($con, $query);
$n = mysqli_num_rows($result);

for($i=0; $i<$n; $i++){

    $name = mysqli_fetch_assoc($result)["name"];
    $score = mysqli_fetch_assoc($result)["score"];
    echo "Name  : ".$name;
    echo "Score : ".$score;
}
?>

这在我执行http://localhost/updateScores.php

时很好用

但是,当我将最后两行更改为

echo $name."\t";
echo $score."\n"; 

我只得到名字(player1)和最后得分(69) 为什么会这样呢?任何帮助和其他链接将是非常好的。谢谢。

enter image description here

2 个答案:

答案 0 :(得分:4)

您的问题是您的for循环有两个对mysqli_fetch_assoc的调用,每个调用都从数据库中获取新行:

$name = mysqli_fetch_assoc($result)["name"];
$score = mysqli_fetch_assoc($result)["score"];

因此,您将最终从一行获得名称,而从下一行获得分数。编写此循环的通常方法是使用while,以获取为循环的条件,然后从获取的行中访问各个值:

while ($row = mysqli_fetch_assoc($result)) {
    $name = $row["name"];
    $score = $row["score"];
    echo "Name  : ".$name;
    echo "Score : ".$score;
}

答案 1 :(得分:2)

MySQLi结果是可遍历的。您可以简单地使用foreach

$result = mysqli_query($con, $query);
foreach($result as $row) {
    echo "Name  : ".$row['name'];
    echo "Score : ".$row['score'];
}