2013-06-25 148 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,你不知道我在那里...... –

相关问题