3

我想将一个 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 扩展中工作吗?

4

3 回答 3

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);

这导致与其他答案相同的结果,但没有循环!它更快!如果你逐行获取,你会更慢,但取决于你做什么,你需要更少的内存。如果您将每一行存储在一个数组中,则情况并非如此。因此,获取所有内容是要走的路。

于 2012-12-10T01:39:26.010 回答
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_*函数来编写新代码。它们不再被维护并且社区已经开始了弃用过程。看到红框了吗?相反,您应该了解准备好的语句并使用PDOMySQLi。如果你不能决定哪个,这篇文章会帮助你。如果您选择 PDO,这里有很好的教程。另请参阅为什么我不应该mysql在 PHP 中使用函数?

于 2012-12-10T01:41:37.263 回答
1

你只取一行来取更多行你需要再次调用 fetch result 所以只需将它添加到你的代码中,事情应该没问题:

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,因为它们都更有效

于 2012-12-10T01:45:30.853 回答