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;
}
}
我试图根据先前的 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;
}
}