2
我想使用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(提取)期間進行回顯,但問題是,在這段時間內,數組將被最新的提取結果覆蓋。
在此先感謝您的所有幫助。
**編輯 我已經編輯腳本和測試由地緣說:
<?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
所有這三個數組元素都是對同一變量的引用。使用fetch代替綁定結果爲'bind_result()'中的每個迭代 – Orangepill