我需要从result对象获取所有行。我正在尝试构建一个新的数组来容纳所有行。
这是我的密码:
$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条答案
按热度按时间t5fffqht1#
mysqli的最新版本有一些改进,可以简化这样的任务。
首先,有一个有用的函数可以返回一个数组,其中包含一个查询返回的所有行,
mysqli_fetch_all()
这意味着,如果您需要一个简单的枚举数组,代码会简单得多:甚至都在一条线上,
但是,如果需要使用某个列对结果数组进行索引,则仍然需要这样的while循环:
请注意,在填充数组之前,应该始终初始化数组,因为这样的变量可能已经存在。
也,
mysqli_result
类现在是可遍历的。这意味着您可以立即在foreach循环中使用它,就像它是一个包含数据库中所有行的数组一样:但它实际上只是while循环的一个语法糖——您不能直接访问这个“数组”的值,这使得这个特性实际上用处不大。
强制性票据。
这个问题已经有十年的历史了,无论是在问题中还是在被接受的答案中,建立联系和执行查询的方式如今都已过时,并受到人们的冷落。
当建立连接时,有几件事要记住。我写了一篇关于如何正确连接mysqli的文章,提供了一个正确的连接示例,强调了以下问题:
必须设置正确的错误报告模式
必须设置正确的字符集
不应使用任何手动错误报告代码(如
die(mysqli_connect_error())
)一个连接只需要在一个单独的文件中建立一次,然后只需要包含在每个需要数据库交互的脚本中。如果函数中使用了数据库代码,则必须将连接变量作为函数参数传入。
在运行查询时,还要记住以下几点:
当查询中使用单个变量时,必须使用prepared语句而不是
mysqli_query()
因此,一个特殊的函数mysqli_stmt_get_result()
应该使用,以便使用熟悉的fetch函数来获取结果行。如果此功能不可用,您可能需要在cpanel中勾选一些复选框(寻找一个标记为mysqlnd
).考虑到mysqli的prepared语句虽然是必需的,但需要编写大量代码,建议使用mysqli的helper函数,该函数将自动执行大部分工作,并使mysqli prepared语句像常规查询一样平滑。
不应使用任何手动错误报告代码(如
die(mysqli_error())
). 由于采用了正确的错误模式,mysqli将自动报告所有错误。1dkrff032#
你有一个轻微的语法问题,即一个错误的分号。
注意到结尾的分号了吗?这意味着下面的块不是在循环中执行的。摆脱它,它应该会起作用。
此外,您可能需要检查查询是否实际工作: