【问题标题】:php for loop is not returning all values, why?php for 循环没有返回所有值,为什么?
【发布时间】:2020-01-07 19:24:29
【问题描述】:

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

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

数据库高分:


  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) 为什么会这样?任何帮助和附加链接都会很棒。谢谢。

【问题讨论】:

  • 使用:header('Content-Type: text/plain'); 在浏览器中工作

标签: php for-loop mysqli


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-01-27
      • 2016-11-04
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      相关资源
      最近更新 更多