PHP 动态复制 Mysqli 结果集

PHP dynamical duplicate Mysqli results set

我试图根据先前的 selection 使用来自数据库 table 的相同结果填充 0 到多个下拉菜单。当 0 和 1 被 selected 但当我试图将结果集插入后续的 select 元素时,它工作正常。我假设这是 $row 数组位置的问题。

$homePlayers = "SELECT first_name, last_name, player_id FROM players WHERE team_name LIKE '$homeTeam%'";
$homePlayersQuery = mysqli_query($dbc, $homePlayers);

if (!$homePlayersQuery) {
            echo 'err';
    } else {
        for ($i = 1; $i <= $homeTeamScore; $i++) {
            echo "<select name='select-home-scorer-$i'>";

            while ($row = mysqli_fetch_array($homePlayersQuery)) {
                echo current($row);
                echo "<option value='" . $row['player_id'] . "'>" . $row['first_name'] . " " . $row['last_name'] . "</option>";
            }
            echo "<option value='og'>Own Goal</option></select><br/>";
        }
    }
}

您遇到的问题是mysqli_fetch_array() 读取一次结果集的数据。读取最后一条记录后,对 mysqli_fetch_array() 的后续调用将 return false。

你有2个选择。 首先,可以将记录读入数组,重复解析数组。

while ($row = mysqli_fetch_array($homePlayersQuery)) {
    $resultsArray[] = $row;
}
for ($i = 1; $i <= $homeTeamScore; $i++) {
   foreach($resultsArray as $resultItem) {
         do_something_here();
   }
}

}

作为第二个选项,您可以将指针倒回到 mysql 结果集,以便您可以重新开始读取结果。

for ($i = 1; $i <= $homeTeamScore; $i++) {

   // Rewind the pointer to the start of the results
   mysqli_data_seek($result, 0);
   while ($row = mysqli_fetch_array($homePlayersQuery)) {
       $resultsArray[] = $row;
   }
}