我今天开始学习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) 为什么会这样呢?任何帮助和其他链接将是非常好的。谢谢。
答案 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'];
}