最新版本的 mysqli 有一些改进可以简化这样的任务。
首先,有一个有用的函数可以返回一个包含查询返回的所有行的数组,mysqli_fetch_all()
这意味着如果您需要一个简单的枚举数组,代码会简单得多:
$query = "SELECT domain FROM services";
$result = $sql->query($query);
return $result->fetch_all(MYSQLI_ASSOC);
甚至都在一行中,
return $sql->query("SELECT domain FROM services")->fetch_all(MYSQLI_ASSOC);
但是,如果您需要使用某些列来索引结果数组,您仍然需要这样的 while 循环:
$query = "SELECT domain FROM services";
$result = $sql->query($query);
$data = [];
while($row = $result->fetch_assoc()) {
$data[$row['id']]=$row;
}
请注意,您应该始终在填充数组之前对其进行初始化,因为这样的变量可能已经存在。
另外,mysqli_result 类现在是可遍历的。这意味着您可以立即在 foreach 循环中使用它,就好像它是一个包含数据库中所有行的数组:
$query = "SELECT domain FROM services";
$result = $sql->query($query);
foreach($result as $row) {
echo $row['name'];
}
但它实际上只是 while 循环的语法糖——你不能直接访问这个“数组”的值,这使得这个特性实际上有点用处。
强制性说明。
这个问题已有十年之久,在问题和接受的答案中建立联系和执行查询的方式如今已过时且不受欢迎。
建立连接后,需要牢记几件事。我在how to connect with mysqli properly 上写了一篇文章,提供了一个正确的连接示例,强调以下问题:
- 必须设置正确的错误报告模式
- 必须设置正确的字符集
-
不得使用手动错误报告代码(如
die(mysqli_connect_error()))
-
连接只能建立一次,在一个单独的文件中,然后只包含在每个需要数据库交互的脚本中。如果函数中使用了数据库代码,则必须将连接变量作为函数参数传入。
在运行查询时,还需要牢记以下几点: