首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP引入多维数组

问PHP引入多维数组
EN

Stack Overflow用户
提问于 2015-07-11 07:58:28
回答 1查看 152关注 0票数 2

我试图使用bind_result和while-fetch将一组数据提取到一个2d数组中,我已经在互联网上搜索了解决方案,但是它并不像预期的那样工作。经过几个小时的调试,我不知道代码中有什么问题。感激是否有人能帮助发现盲点。

设想情况:

我有一张桌子如下:

代码语言:javascript
复制
tbl_team
teamname    id      name    gender
team1       1       John    Male
team1       2       Kelly   Female
team1       3       Chan    Male
team2       1       Jordan  Male
... etc

我创建了一个函数来查询这些基于“团队名称”的数据。

代码语言:javascript
复制
<?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;
  }
}
?>

然后,我有一部分代码将调用这个函数并在屏幕上打印结果:

代码语言:javascript
复制
<?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>";
  }
?>

预期结果如下:

代码语言:javascript
复制
Team1 Members as below:
1 - John - Male
2 - Kelly - Female
3 - Chan - Male

但事实上,我得到的结果如下:

代码语言:javascript
复制
Team1 Members as below:
3 - Chan - Male
3 - Chan - Male
3 - Chan - Male

查询返回的结果是正确的,因为我在while( fetch )期间尝试回显,但问题是,在while中,数组被最近的提取结果覆盖。

提前感谢你的帮助。

**编辑我编辑了脚本并测试了Geo的评论:

代码语言:javascript
复制
<?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>";
  ?>

我得到的结果如下:

代码语言:javascript
复制
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))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-11 08:36:22

感谢Orangepill和evans_murithi!

我从没想过这是由bind_result造成的

修改如下:

代码语言:javascript
复制
<?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;
  }
}
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31354861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档