在 PHP 中,很多时候我们需要从数据库中获取数据并以 JSON 格式返回,比如为前端提供 API 接口。要做到这一点,可以使用 mysqli 扩展执行查询,再用 json_encode() 函数将结果数组编码为 JSON 字符串。
本文将一步步讲解如何实现这一过程。
首先,需要使用 mysqli 创建与数据库的连接:
$servername = "localhost";
$username = "db_user";
$password = "db_password";
$database = "db_name";
$conn = new mysqli($servername, $username, $password, $database);
// 检查连接是否成功
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
我们以查询一张名为 users 的表为例,获取所有用户数据:
$sql = "SELECT id, username, email FROM users";
$result = $conn->query($sql);
这里 $result 就是一个 mysqli_result 对象,包含了查询到的结果。
由于 json_encode() 无法直接编码 mysqli_result 对象,我们需要先把它转换成一个数组:
$data = array();
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$data[] = $row;
}
}
这里我们使用 fetch_assoc() 方法把每一行数据作为关联数组取出,并添加到 $data 数组中。
现在我们有了包含所有查询结果的数组 $data,可以用 json_encode() 转换成 JSON 格式:
$jsonResult = json_encode($data);
// 输出 JSON 数据
header('Content-Type: application/json');
echo $jsonResult;
这里我们还设置了 Content-Type 头为 application/json,告诉客户端返回的是 JSON 格式。
综合以上步骤,完整的代码如下:
<?php
$servername = "localhost";
$username = "db_user";
$password = "db_password";
$database = "db_name";
$conn = new mysqli($servername, $username, $password, $database);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$sql = "SELECT id, username, email FROM users";
$result = $conn->query($sql);
$data = array();
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$data[] = $row;
}
}
$conn->close();
header('Content-Type: application/json');
echo json_encode($data);
?>
确保数据库连接信息(如用户名、密码、数据库名)正确。
在实际项目中,为了安全和性能,建议使用预处理语句(prepared statements)代替直接拼接 SQL。
如果要测试接口,可以用浏览器访问,例如:
https://m66.net/api/get_users.php
这样就可以在浏览器或前端代码中直接获取 JSON 格式的用户数据了。