将结果从列返回到数组中

时间:2014-01-06 15:10:44

标签: php mysql sql arrays

我是PHP的新手,我意识到我需要学习很多东西,特别是关于SQL注入攻击和新的PHP 5.5 oo的东西。

然而,在我学习的过程中,我试着尝试一下并进行实验,但我遇到了一个问题。我需要将查询的一个列(team_name)的所有结果都放到一个数组中(零索引会更容易),这样我就可以将这些结果放入foreach循环来创建一个fixture列表。例如 - 这就是我想对数据做的...

foreach ($teams as $team) {
    foreach ($teams as $opposition) {
        if ($team != $opposition) {
            echo "$team versus $opposition";
        }
    }
}

所以我的sql查询如下......

$query="select * from pool_a";
$result=mysql_query($query);
$num=mysql_num_rows($result);

然后我可以轻松输出我要查找的数据,如下所示;

echo "<table>";
for ($i=0;$i<$num;$i++) {
    $teams=mysql_result($result,$i,'team_name');
      echo "<tr><td>$teams</tr>";
}
echo "</table>";

但我不能做的是将数据放入数组中。我认为从上面的msql_query返回的数据总是以数组的形式返回,无论结果的数量如何,但如果我对$ teams运行is_array()检查,则返回false。

我尝试过使用explode(在每个团队名称之后添加逗号并修剪掉最后一个名称之后),然后使用foreach循环,但它只返回与索引[0]相关联的值。我应该在这里补充说,虽然键是0,但我得到的实际值是上面回显的列表中的最后一个,我也不明白。

非常感谢任何帮助。

由于

3 个答案:

答案 0 :(得分:3)

$team_names = array();
while ($row = mysql_fetch_assoc($result)) {
    $team_names[] = $row['team_name'];
}

mysql_fetch_assocmysql_fetch_rowmysql_fetch_array都将一行作为数组返回(它们的索引方式不同)。但mysql_result只返回结果中的单个项,因此它不会返回数组。

您可以使用mysql_result执行与上述相同的操作,但是您仍然必须自己将它们推送到结果数组中:

for ($i=0;$i<$num;$i++) {
    $team=mysql_result($result,$i,'team_name');
    $team_names[] = $team;
}

答案 1 :(得分:1)

要将查询结果导入数组,您可以执行此操作

$query="select * from pool_a";
$result=mysql_query($query);
$result_arr = mysql_fetch_array($result);
$num=mysql_num_rows($result);

但是,请考虑使用PDO驱动程序连接到数据库。它远远优于在程序上进行,并且它更安全,因为Prepared Statments将帮助保护您免受注入攻击。您正在使用的方法已弃用。

答案 2 :(得分:0)

而不是使用mysql_result尝试使用mysql_fetch_array($ result,MYSQL_ASSOC)

此函数将为您提供一系列来自MySQL的结果。