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

4

4 回答 4

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;
}
于 2013-06-25T22:27:51.410 回答
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;
}
于 2013-06-25T22:24:29.187 回答
0

一旦return在函数中使用,函数就会结束并return返回 after 的值。

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

例如:

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;
}
于 2013-06-25T22:20:52.757 回答
0

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

希望这可以帮助

于 2013-06-25T22:21:45.867 回答