PHP获取多维数组

PHP获取多维数组,php,arrays,Php,Arrays,我试图使用bind_result,在fetch将一组数据提取到一个二维数组中时,我已经在互联网上搜索解决方案,但它并没有按预期工作。我不确定调试几个小时后代码中出现了什么错误。如果有人能帮助发现盲点,我将不胜感激 情景: 我的表格如下: tbl_team teamname id name gender team1 1 John Male team1 2 Kelly Female team1 3

我试图使用bind_result,在fetch将一组数据提取到一个二维数组中时,我已经在互联网上搜索解决方案,但它并没有按预期工作。我不确定调试几个小时后代码中出现了什么错误。如果有人能帮助发现盲点,我将不胜感激

情景:

我的表格如下:

tbl_team
teamname    id      name    gender
team1       1       John    Male
team1       2       Kelly   Female
team1       3       Chan    Male
team2       1       Jordan  Male
... etc
Team1 Members as below:
3 - Chan - Male
3 - Chan - Male
3 - Chan - Male
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))
<?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;
  }
}
?>
我创建了一个基于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;
  }
}
?>
但事实上,我得到的结果如下:

tbl_team
teamname    id      name    gender
team1       1       John    Male
team1       2       Kelly   Female
team1       3       Chan    Male
team2       1       Jordan  Male
... etc
Team1 Members as below:
3 - Chan - Male
3 - Chan - Male
3 - Chan - Male
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))
<?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;
  }
}
?>
查询返回的结果是正确的,因为我在while(fetch)期间尝试回显,但问题是,在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>";
  ?>

感谢Orangepill和evans_murithi

我从来没有想到这是由bind_结果引起的

修改如下:

tbl_team
teamname    id      name    gender
team1       1       John    Male
team1       2       Kelly   Female
team1       3       Chan    Male
team2       1       Jordan  Male
... etc
Team1 Members as below:
3 - Chan - Male
3 - Chan - Male
3 - Chan - Male
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))
<?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;
  }
}
?>


您确定它就是这么做的吗?您是否对数组进行了
打印\r
,以确保其中的数据符合预期?您好,返回的数组中有3行,其中3行被查询的最新获取覆盖。你能分享更多关于打印的细节吗?事实上,我对PHP还很陌生。谢谢你的帮助!所有三个数组元素都是对同一变量的引用。。使用fetch而不是bind results为每个迭代创建新数组。在
bind\u result()
中,为每个结果使用不同的变量,例如
bind\u result($id,$name,$gender)
Hi Orangepill,注意到,将尝试此方法。马上更新。