如何从Mysql查询中循环返回数组

时间:2010-05-18 21:02:10

标签: php mysql class arrays

这对你们来说可能很容易,但我无法得到它。

我有一个查询数据库并返回查询结果的php类。我将结果分配给一个数组,并希望在我的main.php脚本上使用它。我试过使用echo $ var [0]或 echo $ var [1]但是输出是'array'而不是我的值。有人可以帮我解决这个问题吗?非常感谢!

我的php课程

<?php 
class teamQuery {

            function teamQuery(){


            }
            function getAllTeam(){
                $connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
                    if (!$connection) {
                        die("Database connection failed: " . mysql_error());
                    }

                    $db_select = mysql_select_db(DB_NAME,$connection);
                    if (!$db_select) {
                        die("Database selection failed: " . mysql_error());
                    }

                  $teamQuery=mysql_query("SELECT * FROM team", $connection);

                    if (!$teamQuery){
                        die("database has errors: ".mysql_error());
                          }
                    $ret = array();   

                    while($row=mysql_fetch_array($teamQuery)){

                    $ret[]=$row;
                    }     
                    mysql_free_result($teamQuery); 

                    return $ret;
                    }


            }


?>

我在php.php上的php

$getTeam=new teamQuery();
$team=$getTeam->getAllTeam();

   //echo $team[0] or team[1] output 'array' string!
  // while($team){
  // do something }  can't work either

  // How to loop through the values??

谢谢!

5 个答案:

答案 0 :(得分:2)

您得到此输出,因为$team[0]$team[1]确实是数组。它们是数据库表的行,每行包含几个字段,例如idname等 你有2维数组,可能如下所示:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => foo
        )

    [1] => Array
        (
            [id] => 2
            [name] => bar
        )
)

要循环浏览数据,请使用forforeach

foreach($team as $member) {
    foreach($member as $k=>$v) {
        echo $k . ': ' . $v;
    }
}

documentation about arrays也许值得你阅读。

答案 1 :(得分:2)

首先建议:使用print_r函数显示数组。这对于查看数据如何存储在变量中非常方便。将其包装在HTML标记<pre>中,因此并非所有内容都在一行中。例如:

echo '<pre>'; print_r($variable); echo '</pre>';

第二:你可能不想那样保存输出。使用$ret显示您的print_r变量,并查看数据的存储方式。更有用的是使用mysql_fetch_assoc。试试这个:

while ($row = mysql_fetch_assoc($teamQuery)) {
  echo '<pre>'; print_r($row); echo '</pre>'
}

您可以看到每行现在包含keyvalue,例如“name”和“John Doe”,“age”和“35”等。这样你可以显示如下的某个值:

echo $row['name']; // John Doe

当您从数据库中检索多个项目并且希望将它们存储在数组中时,您需要为每个条目指定唯一标识符。通常,这是存储数据的表中的唯一ID号。这样你就可以将所有这些键和值组合在一起,如下所示:

while ($row = mysql_fetch_assoc($teamQuery)) {
  $results[$row['id']]['name'] = $row['name'];
  // etc
}

您可以为检索到的每个字段手动执行此操作。如果您需要所有字段(选择*时通常执行的操作),则更容易:

while ($row = mysql_fetch_assoc($teamQuery)) {
  foreach ($row as $key => $value) {
    $results[$row['id']][$key] = $value;
  }
}

$results数组现在包含以下内容:

Array
(
    [1] => Array
        (
            [id] => 1
            [name] => John Doe
        )

    [2] => Array
      (
          [id] => 2
          [name] => Jane Doe
      )
)

......以及所有其他值。现在,您可以再次使用已提到的foreach函数来显示每个条目。您不必使用$key$value;选择更有意义的东西更容易。例如:而不是$results(或您的$ret)使用$team$members,因为这是您正在检索的内容。然后像这样显示每个成员:

foreach ($team as $memberId => $member) {
  echo $member['name']; // John Doe, Jane Doe, etc.
}

答案 2 :(得分:1)

试试这个(及其变体):

foreach ($team as $member) {
    echo $member[0];
    echo $member[1];
    //etc.
}

答案 3 :(得分:1)

这是因为数组中的每个元素也是一个数组。 print_r阵列可以亲眼看到它。

例如,如果要输出每个团队的名称,则必须首先遍历外部数组,然后访问循环内的各个字段。

foreach ($team as $t) {
    echo $t["name"] . "<br />"; // hopefully it's "name", the * in your query isn't really self-documenting
}

答案 4 :(得分:1)

foreach ($team as $t)
    echo $t[0];