返回所有行,而不仅仅是一行

时间:2013-06-25 22:18:30

标签: php function mysqli return

我试图返回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())不返回所有行,只返回第一行。我怎样才能让它返回每一行?我知道如何在不使用函数和诸如此类的情况下完成它,但我想弄清楚如何使用函数来完成它。谢谢!

4 个答案:

答案 0 :(得分:3)

当你使用'return'时,你的函数会立即返回 - 第一次循环。通过循环的后续运行被取消,mysqli_close也是如此。

另外:(1)您正在为其他人关闭数据库连接(根据经验,如果您打开它,关闭它;如果您不打开它,请不要关闭它),以及(2) )$ result不是最终结果 - 考虑使用更具描述性的变量

那么它看起来像这样:

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;
}

答案 1 :(得分:0)

在函数中使用return后,函数结束并返回return之后的值。

因此,您需要将数据库行存储在某处,然后在最后返回所有存储的行。

e.g:

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;
}

答案 2 :(得分:0)

一旦达到return语句,该功能就完成了。您需要将行收集到某种集合中并返回行集合。

希望这有帮助

答案 3 :(得分: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;
}