我试图使用bind_result和while-fetch将一组数据提取到一个2d数组中,我已经在互联网上搜索了解决方案,但是它并不像预期的那样工作。经过几个小时的调试,我不知道代码中有什么问题。感激是否有人能帮助发现盲点。
设想情况:
我有一张桌子如下:
tbl_team
teamname id name gender
team1 1 John Male
team1 2 Kelly Female
team1 3 Chan Male
team2 1 Jordan Male
... etc我创建了一个函数来查询这些基于“团队名称”的数据。
<?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 )期间尝试回显,但问题是,在while中,数组被最近的提取结果覆盖。
提前感谢你的帮助。
**编辑我编辑了脚本并测试了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))发布于 2015-07-11 08:36:22
感谢Orangepill和evans_murithi!
我从没想过这是由bind_result造成的
修改如下:
<?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();
//change this part
//$stmt->bind_result($team_member['id'],$team_member['name'],$team_member['gender']);
$stmt->bind_result($id, $name, $gender);
/*******/
$team = array();
while($stmt->fetch())
{
$team_member = array();
$team_member['id'] = $id;
$team_member['name'] = $name;
$team_member['gender'] = $gender;
//echo implode(" - ", $team_member)."<br>"; //debug purpose
$team[] = $team_member;
}
$stmt->close();
return $team;
}
}
?>https://stackoverflow.com/questions/31354861
复制相似问题