在使用 PHP 和 MySQL 开发应用时,我们经常会用到 mysqli 来执行数据库查询。执行 SELECT 语句后,mysqli_query() 返回一个 mysqli_result 对象,但这个对象并不是直接可用的数组格式。为了更方便地处理数据,我们通常需要把查询结果完整地转换成一个二维数组。
下面是具体的实现方法。
我们可以使用 mysqli_fetch_all() 来一次性获取所有行,但要注意这个函数需要至少 PHP 5.3 及以上版本。如果要兼容更早的版本,可以使用 mysqli_fetch_assoc() 结合循环。
以下是使用 mysqli_fetch_all() 的例子:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
// 检查连接
if ($mysqli->connect_error) {
die("连接失败: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM your_table";
$result = $mysqli->query($sql);
if ($result) {
// MYSQLI_ASSOC 表示返回关联数组
$data = $result->fetch_all(MYSQLI_ASSOC);
print_r($data);
} else {
echo "查询失败: " . $mysqli->error;
}
$mysqli->close();
?>
如果你需要兼容更早版本的 PHP,推荐使用 while 循环:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("连接失败: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM your_table";
$result = $mysqli->query($sql);
$data = [];
if ($result) {
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
print_r($data);
} else {
echo "查询失败: " . $mysqli->error;
}
$mysqli->close();
?>
为了更好地复用,你也可以把它封装成一个函数:
<?php
function fetchAllResults($mysqli, $query) {
$result = $mysqli->query($query);
$data = [];
if ($result) {
while ($row = $result->fetch_assoc()) {
$data[] = $row;
}
}
return $data;
}
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_error) {
die("连接失败: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM your_table";
$data = fetchAllResults($mysqli, $sql);
print_r($data);
$mysqli->close();
?>
安全性:请记得对外部输入的数据使用预处理语句 (prepare) 防止 SQL 注入。
性能:一次性取出大量数据可能会占用较多内存,如果数据量大,建议分页查询。
错误处理:总是检查 $result 是否为 false,避免在查询失败时继续执行后续代码。
假设你要用的接口是: