如何将sql查询结果放入数组?

时间:2012-12-10 01:17:57

标签: php mysql

我想将sql查询结果放入数组中。 我尝试了下面的代码,但它显示了$ count次的第一条记录。 显然,“$ dept [$ i] = $ row ['name'];”是错误的。“ 但我不知道如何解决它。 有人帮忙吗?

$sql="SELECT name FROM system_dept ORDER BY id";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
$count=mysql_num_rows($result);
if (!mysql_query($sql,$con))
{
    die('Error: ' . mysql_error());
}
else
{
    $dept = array();
    $i=0;

    for($i=0;$i<$count;$i++)
    {
        $dept[$i]= $row['name'];
        echo $dept[$i];
    }
}

好的,我尝试使用mysqli,但它不起作用。 Web服务器显示: MySQL客户端版本:4.1.22 PHP扩展:mysql mysqli可以在mysql php扩展中工作吗?

3 个答案:

答案 0 :(得分:5)

为什么在实际需要所有行时只提取一行?

使用mysqli:

$db = new mysqli("localhost", "foo_dbo", "pass", "foo_db");    
$result = $db->query("SELECT name FROM system_dept ORDER BY id");    
$names = $result->fetch_all(MYSQLI_ASSOC);

使用PDO:

$db = new PDO('mysql:dbname=foo_db;dbhost=localhost', 'foo_dbo', 'pass');
$stmt = $db->query("SELECT name FROM system_dept ORDER BY id");
$names = $stmt->fetchAll(PDO::FETCH_ASSOC);

这导致与其他答案相同的结果,但没有循环!它更快! 如果逐行获取,则速度较慢,但​​根据您的操作,您将需要更少的内存。如果要将每一行存储在一个数组中,情况就不是这样了。因此,获取所有内容是可行的方法。

答案 1 :(得分:3)

$dept = array();
$result = mysql_query('SELECT name FROM system_dept ORDER BY id');
while ($row = mysql_fetch_assoc($result))
{
  $dept[] = $row['name'];
  echo $row['name'];
}

请不要使用mysql_*函数来编写新代码。它们已不再维护,社区已经开始deprecation process。查看 red box ?相反,您应该了解prepared statements并使用PDOMySQLi。如果您无法确定哪个,this article会对您有所帮助。如果您选择PDO,here is good tutorial。另请参阅Why shouldn't I use mysql functions in PHP?

答案 2 :(得分:1)

您只需获取一行来获取更多行,您需要再次调用获取结果 所以只需将其添加到您的代码中,事情应该没问题:

for($i=0;$i<$count;$i++)
    {
        $dept[$i]= $row['name'];
        echo $dept[$i];
        $row=mysql_fetch_array($result);
    }

我建议使用while循环,如下所示:

$sql="SELECT name FROM system_dept ORDER BY id";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if (!mysql_query($sql,$con))
{
    die('Error: ' . mysql_error());
}
else
{
    $dept = array();
    while($row=mysql_fetch_array($result))
    {
      $dept[]=$row['name'];
      echo $row['name'];
     }
}

如果可能的话,请查看mysqli和PDO,因为它们都更有效率