使用PHP将数据库行放入数组?

时间:2010-05-16 17:42:24

标签: php sql

我只是想知道如何能够编写执行SQL查询的代码,然后将每一行放入一个新数组中,例如,假设一个表如下所示:

$people= mysql_query("SELECT * FROM friends")    

输出:

| ID | Name | Age |   
--1----tom----32   
--2----dan----22   
--3----pat----52   
--4----nik----32   
--5----dre----65

我怎样才能创建一个以下列方式工作的多维数组,第一行第二列数据可以使用$ people [0] [1]访问,第五行第三列可以使用$ people [4] [ 2]。

我将如何构建这种类型的数组?

很抱歉,如果这是一个奇怪的问题,它只是我不熟悉PHP + SQL,并想知道如何直接访问数据。性能和速度不是问题,因为我只是编写小型测试脚本来掌握该语言。

3 个答案:

答案 0 :(得分:7)

$rows = array();
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    $rows[] = $row; 
}

答案 1 :(得分:1)

您是否愿意使用数据库模块,例如PEAR::DB模块?如果是这样,请查看使用PHP的Pear DB模块编写脚本的this article by Paul Dubois。该模块已经superseded,但它将向您展示一些更高级(和更常见的)数据库实践的基础知识。

至于你的实际问题,你可以遍历所有行并填充数组......

$dsn = "mysqli://testuser:testpass@localhost/test";
$conn =& DB::connect ($dsn);
if (DB::isError ($conn)) { /* ... */ }

$result =& $conn->query ("SELECT * FROM friends");
if (DB::isError ($result)){ /* ... */ }

while ($row =& $result->fetchRow()) {
   $people[] = $row;
}
$result->free ();

或者你可以编写一个实现ArrayAccess interface的对象,在引用该索引时请求一个特定的行。 (这段代码可能完全错误,但这是我的尝试)

class FriendsTable implements ArrayAccess {
    function offsetGet($key) {  
        $result =& $conn->query ("SELECT * FROM friends LIMIT $key, 1",); // careful; this is vulnerable to injection...
        if (DB::isError ($result)){ die ("SELECT failed: " . $result->getMessage () . "\n"); }
        $people = null;
        if ($row =& $result->fetchRow ()) {
           $people = $row;
        }
        $result->free ();
        return $people;
    }  

    function offsetSet($key, $value) {  
        /*...*/ 
    }  

    function offsetUnset($key) {  
        /*...*/ 
    }  

    function offsetExists($offset) {  
        /*...*/ 
    }
}

$people = new FriendsTable();
$person = $people[2]; // will theoretically return row #2, as an array

......或其他什么。

答案 2 :(得分:0)

$array = array();
$sql = "SELECT * FROM friends";
$res = mysql_query($sql) or trigger_error(mysql_error().$sql);
while($row = mysql_fetch_assoc($res)) $array[]=$row;