Я пытаюсь использовать bind_result и while-fetch для извлечения набора данных в массив 2d, я искал через интернет для решения, но он не работает должным образом. Я не уверен, что не так в коде после нескольких часов отладки. Цените, если кто-то может помочь обнаружить слепое пятно.PHP извлечения в многомерный массив
Сценарий:
У меня есть таблица, как показано ниже:
tbl_team
teamname id name gender
team1 1 John Male
team1 2 Kelly Female
team1 3 Chan Male
team2 1 Jordan Male
... etc
Я создал функцию, чтобы запросить эти базы на teamname.
<?php
function queryteam ($team)
{
$stmt = $mysqli->prepare("select id, name, gender from tbl_team where teamname = ?");
if($stmt)
{
$stmt->bind_param('s',$team);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($team_member['id'],$team_member['name'],$team_member['gender']);
$team = array();
while($stmt->fetch())
{
//echo implode(" - ", $team_member)."<br>"; //debug purpose
$team[] = $team_member;
}
$stmt->close();
return $team;
}
}
?>
Тогда у меня есть часть кода будет вызывать эту функцию и распечатать результат на экране:
<?php
$team_array = queryteam("team1");
FOR($i = 0, $count=count($team_array);$i<$count;$i++)
{
echo "Team1 Members as below:<br>";
echo implode(" - ",$team_array[$i])."<br>";
}
?>
Ожидаемый результат будет, как:
Team1 Members as below:
1 - John - Male
2 - Kelly - Female
3 - Chan - Male
Но на самом деле я я получаю следующий результат:
Team1 Members as below:
3 - Chan - Male
3 - Chan - Male
3 - Chan - Male
Запрос возвращает результат правильно, поскольку я пытался эхо во время while (fetch), но проблема заключается в том, что в то время массив переопределяется последним результатом выборки.
Заранее благодарим за помощь.
** редактировать Я редактировал сценарий и испытания, как прокомментировал Geo:
<?php
function queryteam ($team)
{
....
$team = array();
while($stmt->fetch())
{
//echo implode(" - ", $team_member)."<br>"; //debug purpose
$team[] = $team_member;
echo "within FETCH: <br>";
print_r($team); echo "<br>";
}
$stmt->close();
return $team;
}
}
$team_array = queryteam("team1");
echo "Function returned:<br>";
print_r($team_array); echo "<br>";
?>
я получил результат, как показано ниже:
within FETCH:
Array([0]=>Array([id]=>1 [name]=>John [gender]=>Male))
Array([0]=>Array([id]=>2 [name]=>Kelly [gender]=>Female) [1]=>Array([id]=>2 [name]=>Kelly [gender]=>Female))
Array([0]=>Array([id]=>3 [name]=>Chan [gender]=>Male) [1]=>Array([id]=>3 [name]=>Chan [gender]=>Male) [2]=>Array([id]=>3 [name]=>Chan [gender]=>Male))
Function returned:
Array([0]=>Array([id]=>3 [name]=>Chan [gender]=>Male) [1]=>Array([id]=>3 [name]=>Chan [gender]=>Male) [2]=>Array([id]=>3 [name]=>Chan [gender]=>Male))
Array([0]=>Array([id]=>3 [name]=>Chan [gender]=>Male) [1]=>Array([id]=>3 [name]=>Chan [gender]=>Male) [2]=>Array([id]=>3 [name]=>Chan [gender]=>Male))
Array([0]=>Array([id]=>3 [name]=>Chan [gender]=>Male) [1]=>Array([id]=>3 [name]=>Chan [gender]=>Male) [2]=>Array([id]=>3 [name]=>Chan [gender]=>Male))
Вы уверены, что это то, что он делает? Вы сделали «print_r» из массива, чтобы убедиться, что данные в нем ожидаются? –
Привет, Geo, возвращенный массив имеет 3 строки внутри, а 3 строки из них переопределены последней выборкой из запроса. Можете ли вы поделиться более подробной информацией о print_r? на самом деле я довольно новичок в PHP. Спасибо за вашу помощь! – Noobilicious
все три элемента массива являются ссылками на одну и ту же переменную. Используйте выборку вместо результатов привязки для создания новых массивов для каждой итерации – Orangepill