【问题标题】:Foreach Just Echoing First EntryForeach 只是呼应第一个条目
【发布时间】:2010-10-29 21:31:49
【问题描述】:

抱歉,如果我知道的更多,但我已经为此苦苦挣扎了一段时间。

我有一个 300 行的 mysql 数据库。它包含 4 列,“eventid”、“player1”、“player2”、“score”。在游戏中,玩家 1 给其他人(玩家 2)打了 100 分。

我要做的是向登录用户 (player1) 显示他们得分的“player2”表格。

我的代码如下所示:

$currentuserid = 00001;

$opponent_data = mysql_query("SELECT * FROM `scores` WHERE `player1` = $currentuserid ORDER by score");

$opponent_count = mysql_num_rows($opponent_data);

    echo $opponent_count.'<br>'; // Just to test -> and it shows I have 144 entries in the array, i.e. 144 player 2's that player 1 has scored

$opponent_scores = mysql_fetch_assoc($opponent_data);

$runrows = $opponent_scores;

foreach ($opponent_scores as &$runrows);

    {
    $id = $runrows['eventid'];
    $player2 = $runrows['player2'];
    $score = $runrows['score'];


    echo $player2." got ".$score;

    echo "<br>";

    }

当我运行这个时,我能看到的是

144

73 得到 44

但我希望看到“玩家 2”的 144 行得到“玩家 2 的分数”。

我做错了什么?

【问题讨论】:

    标签: php while-loop


    【解决方案1】:

    for-each 循环后面有一个分号;那不应该在那里。

    【讨论】:

      【解决方案2】:

      另外:mysql_fetch_assoc 只会返回指向结果集中第一行的指针。这就是为什么您最终只会打印一行。

      将您的代码更改为:

      while($opponent=mysql_fetch_assoc($opponent_data)) {
           echo $opponent['player2']." got ".$opponent['score'];
      }
      

      【讨论】:

      • 非常感谢,特别是解释了 mysql_fetch_assoc 在做什么 - 我以为它正在获取所有行。
      【解决方案3】:

      for each 语句后面好像有一个反常的分号

      【讨论】:

        【解决方案4】:
        $currentuserid = 00001;
        
        $opponent_data = mysql_query("SELECT * FROM `scores` WHERE `player1` = $currentuserid ORDER by score");
        
        $opponent_count = mysql_num_rows($opponent_data);
        
            echo $opponent_count.'<br>'; // Just to test -> and it shows I have 144 entries in the array, i.e. 144 player 2's that player 1 has scored
        
        $opponent_scores = mysql_fetch_assoc($opponent_data);
        
        foreach ($opponent_scores as $row);
        
            {
            $id = $row['eventid'];
            $player2 = $row['player2'];
            $score = $row['score'];
        
        
            echo $player2." got ".$score;
        
            echo "<br>";
        
            }
        

        【讨论】:

          【解决方案5】:

          mysql_fetch_assoc 返回单个记录的关联数组。

          查看文档以获取您应该做什么的示例:http://uk3.php.net/mysql_fetch_assoc

          while ($row = mysql_fetch_assoc($opponent_scores)) {
              // var_dump($row);
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-03-22
            • 2019-01-24
            • 2018-06-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多