2013-06-25 147 views
0

我試圖返回MySQL表中的所有行。我有以下功能:返回所有行,不只是一個

function listTickets() { 
    global $con; 
    $result = mysqli_query($con, "SELECT * FROM tickets"); 
    while($row = mysqli_fetch_array($result)) { 
     return array($row['subject'], $row['category'], $row['username'], $row['last'], $row['id', $row['status']); 
    } 
    mysqli_close($con); 
} 

然而,print_r(listTickets())不返回所有行,僅第一行。我怎樣才能使它返回每一行?我知道如何做到這一點,而不使用函數和什麼,但我想弄清楚如何使用函數做到這一點。謝謝!

回答

3

當您使用「迴歸」,你的函數將立即返回 - 第一次輪循環。與mysqli_close一樣,通過循環的後續運行也被取消。 (1)你正在關閉其他人的數據庫連接(作爲一個經驗法則,如果你打開它,關閉它;如果你不打開它,不要關閉它)和( 2)$結果不壓軸結果 - 考慮使用更具描述性的變量

現在,它看起來像這樣:

function listTickets() 
{ 
    global $con; 
    $query = mysqli_query($con, "SELECT * FROM tickets"); 
    $result = array(); 
    while($row = mysqli_fetch_array($query)) 
    { 
     array_push($result,array($row['subject'], $row['category'], $row['username'], $row['last'], $row['id', $row['status'])); 
    } 
    return $result; 
} 

接下來,我將添加選項MYSQLI_NUM(甚至MYSQLI_ASSOC)到mysqli_fetch_array ,並移除接受數組的代碼,並將其轉換爲幾乎完全相同的數組。

function listTickets() 
{ 
    global $con; 
    $query = mysqli_query($con, "SELECT * FROM tickets"); 
    $result = array(); 
    while($row = mysqli_fetch_array($query,MYSQLI_NUM)) 
    { 
     array_push($result,$row); 
    } 
    return $result; 
} 
+0

非常感謝您的幫助!還有一個問題是,我如何去迴應結果。現在,print_r會顯示一切,就像我想要的一樣,但是,在回顯例如$ ticket [1]時,它只會回顯第一行,而不是每一行。我想我會需要一段時間的聲明。我將如何格式化它? – user2521909

+0

新問題:) - 嘗試'foreach($ result AS $ ticket){print $ ticket [0]}'來打印每張票中的第一個字段。 –

0

一旦在函數中使用return,函數結束並返回return之後的值。

因此,您需要將數據庫行存儲在某處,然後在最後返回所有存儲的行。

例如爲:

function listTickets() 
{ 
    global $con; 
    $result = mysqli_query($con, "SELECT * FROM tickets"); 

    $stack = array(); // <- the temp array 
    while($row = mysqli_fetch_array($result)) 
    { 
     // push the db result to the stack 
     array_push($stack, $row); 
    } 
    mysqli_close($con); 

    return $stack; 
} 
0

一旦達到return聲明,該功能完成。您需要將行收集到某種集合中並返回行的集合。

希望這有助於

0

return立即退出函數。累積在緩衝區中的輸出然後返回它:

function listTickets() 
{ 
    global $con; 
    $result = mysqli_query($con, "SELECT * FROM tickets"); 
    buffer = array(); 
    while($row = mysqli_fetch_array($result)) 
    { 
     array_merge(buffer,array($row['subject'], $row['category'], $row['username'], $row['last'], $row['id', $row['status'])); 
    } 
    mysqli_close($con); 
    return buffer; 
} 
+0

@AlexBrooks,你不知道我在那裏...... –

相關問題