PHP mySQL - 你能否返回带有数字索引的关联数组?

时间:2008-12-04 01:40:56

标签: php mysql

我的db类

中有这个方法
public function query($queryString)
    {

      if (!$this->_connected) $this->_connectToDb(); //connect to database

      $results = mysql_query($queryString, $this->_dbLink) or trigger_error(mysql_error());

      return mysql_num_rows($results) > 0 ? mysql_fetch_assoc($results) : false;            

    }

这适用于返回1行的查询,但是如何才能返回这样的数组呢?

$array[0]['name'] = 'jim'
$array[0]['id'] =  120
$array[1]['name'] = 'judith' 
$array[1]['ID'] = 121

现在我知道我可以使用while循环将这些数据插入到数组中,但是我想知道PHP是否可以使用内部函数执行此操作?我无法在文档中找到我所追求的内容。

我不希望在方法中运行while的原因是因为我将在返回时重复数组,并且我不想两次运行结果(出于性能原因)。 / p>

有办法做到这一点吗?我的常规查询方法设计有问题吗?

非常感谢!

5 个答案:

答案 0 :(得分:4)

public function query($queryString)
    {

        if (!$this->_connected) $this->_connectToDb(); //connect to database

        $results = mysql_query($queryString, $this->_dbLink) or trigger_error(mysql_error());

        $data = array();
        while($row = mysql_fetch_assoc($results))
         {
               $data[] = $row;
         }
        return $data;

    }

这将始终返回一个数组。

编辑: 我没有很好地阅读这个问题。 如果你真的不想使用循环,那么我会这样做:

public function query($queryString)
    {

        if (!$this->_connected) $this->_connectToDb(); //connect to database

        return mysql_query($queryString, $this->_dbLink) or trigger_error(mysql_error());

    }

然后循环它,但我只是使用循环。

答案 1 :(得分:2)

您可能还想查看PDO扩展程序。您可以将整个结果集加载到数组中,也可以使用foreach循环。

<?php
$db = new PDO($connection_string, $username, $password);
$result = $db->query($queryString);
foreach($result as $row) {
    // do something
}

// or

$result = $db->query($queryString);
$result_array = $result->fetchAll(PDO::FETCH_ASSOC);
?>

答案 2 :(得分:1)

大多数人在查询中使用while()循环来完成您想要的操作,然后遍历数组来处理它。

然而,你是对的:它浪费了内存,这可能是一个大数据集的问题。另一种方法是让查询方法返回结果集资源。然后你的while循环可以使用它来获取它所需的每一行。

为了抽象出来,我会建议另一个班为你做这件事。然后,您的查询调用将返回该类的新实例,该实例将MySQL结果集资源作为实例变量并打包mysql_fetch_assoc()调用。

答案 3 :(得分:0)

查看PEAR::MDB2Quickstart Cheatsheet)。它提供了许多不同的功能来做这样的事情。它也不会限制你使用MySQL特定的函数,因为它是一个数据库抽象层。

$ result = $ db-&gt; queryRow($ query,MDB2_FETCHMODE_ASSOC);

还有其他抽象层,如ADO。

答案 4 :(得分:0)

感谢您的想法。我有一个函数从sql返回一个关联数组(在Moodle中使用)。

$ results = get_records_sql($ sql);

//to create a numerically indexed array:
$data = array();
foreach ($results as $row)
     {
           $data[] = $row;
     }
return $data; 

}