我需要从结果对象中获取所有行。我正在尝试生成一个新的数组来保存所有行。
下面是我的代码:
$sql = new mysqli($config['host'],$config['user'],$config['pass'],$config['db_name']);
if (mysqli_connect_errno())
{
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT domain FROM services";
$result = $sql->query($query);
while($row = $result->fetch_row());
{
$rows[]=$row;
}
$result->close();
$sql->close();
return $rows;
$rows
应该是包含所有行的新数组,但我得到了一个空数组。
知道为什么会这样吗?
2条答案
按热度按时间nxagd54h1#
您遇到了一个轻微的语法问题,即错误的分号。
注意到结尾的分号了吗?它意味着后面的代码块没有在循环中执行。去掉它,它应该可以工作。
此外,您可能需要让mysqli报告它遇到的所有问题:
fv2wmkja2#
最新版本的mysqli有一些改进可以简化这样的任务。
首先,有一个有用的函数
mysqli_fetch_all()
可以返回一个数组,其中包含查询返回的所有行这意味着如果你需要一个简单的枚举数组,代码会简单得多:
或者甚至全部在一条线上,
但是,如果需要使用某个列来索引结果数组,则仍然需要如下所示的while循环:
请注意,在填充数组之前,应该始终初始化数组,因为这样的变量可能已经存在。
另外,
mysqli_result
类现在是可遍历的,这意味着你可以马上在foreach循环中使用它,就好像它是一个包含数据库中所有行的数组一样:但它实际上只是while循环的语法糖--你不能直接访问这个“数组”的值,这使得这个特性实际上有点用处。
强制性注解。
这个问题已经有十年的历史了,无论是在问题中还是在被接受的答案中,建立连接和执行查询的方式现在都已经过时了。
当建立连接时,有几件事要记住,我写了一篇关于how to connect with mysqli properly的文章,提供了一个正确的连接示例,强调了以下问题:
*无手动错误报告应始终使用代码(如
die(mysqli_connect_error())
)在运行查询时,还需要记住以下几点:
mysqli_query()
mysqli_stmt_get_result()
的特殊函数,以便使用熟悉的fetch函数来获取结果行。如果此函数不可用,您可能需要在cpanel中勾选某个复选框(查找标记为mysqlnd
的复选框)。*没有手动错误报告代码应该永远使用(如
die(mysqli_error())
)。由于正确的错误模式,mysqli将自动报告所有错误。