2010-05-16 51 views
2

我只是想知道我怎麼會能夠代碼執行一個SQL查詢,然後每一行放入一個新的陣列,例如,讓我們說某個表中查找類似如下:使用PHP將數據庫行放入數組中?

$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的新手,並想知道如何直接訪問數據。性能和速度不是問題,因爲我只是編寫小測試腳本來掌握語言。

回答

7
$rows = array(); 
while ($row = mysql_fetch_array($result, MYSQL_NUM)) { 
    $rows[] = $row; 
} 
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; 
+0

您應該初始化數組,否則如果沒有行,則該變量未定義。 – Artefacto 2010-05-16 17:48:34

+0

好點的感謝 – 2010-05-16 17:50:09

1

您開放使用DB模塊,像PEAR::DB模塊?如果是這樣,請查看this article by Paul Dubois關於使用PHP的Pear DB模塊編寫腳本。該模塊已被superseded,但它會告訴你一些更先進(和更常見的)數據庫實踐的基礎知識。

至於你的實際問題,你可以遍歷所有行和填充數組...

$dsn = "mysqli://testuser:[email protected]/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 

...什麼的。

+1

我覺得很有意思,在你執行你用毫無理由引用offsetget,然後根據你應該(至少如果你想要的東西像一個$ =新FriendsTable不要返回引用() ; $ a [「foo」] [「bar」] = 42;工作)。但否則,+1。 – Artefacto 2010-05-16 18:07:14

+0

雅,我複製粘貼有點倉促了我掛的文章,我認爲它的意思更多PHP4 ...你建議我刪除了引用,或者我應該添加引用回報? – 2010-05-16 18:10:45

+1

真的沒有理由通過引用$ result和$ people來分配。如參考返回,這是offsetget的通常的行爲,所以像$一個[ 「foo」 的] [ 「酒吧」] = 42的東西,$ A [ 「foo」 的] - >巴= 42或取消($ A [ 「foo」] [「bar」])有任何作用。爲了公平起見,在這種情況下,真的沒有多大意義的,因爲你每次都返回新的數據。它將使意義,如果你保存結果在一個類的屬性,然後返回屬性值。 – Artefacto 2010-05-16 18:18:58

相關問題