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