在 PHP 中从 MySQL 数据库创建 JSON API 服务,通常涉及以下步骤:
以下是完整的实现方法,包括 基础版 和 进阶版(支持 GET/POST 参数)。
假设我们有一个 MySQL 数据库表 users
,包含 id
, name
, email
字段,我们要返回所有用户数据。
api.php
)<?php
// 1. 连接 MySQL 数据库
$host = "localhost"; // 数据库主机
$dbname = "your_database"; // 数据库名
$username = "root"; // 数据库用户名
$password = ""; // 数据库密码
try {
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
// 2. 查询数据
$sql = "SELECT * FROM users";
$stmt = $conn->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC); // 获取关联数组
// 3. 转换为 JSON 并返回
header('Content-Type: application/json'); // 设置响应头为 JSON
echo json_encode($result, JSON_PRETTY_PRINT); // JSON_PRETTY_PRINT 可选,美化输出
// 4. 关闭连接(PDO 会自动关闭)
$conn = null;
?>
http://your-server/api.php
,会返回类似:[
{
"id": 1,
"name": "张三",
"email": "zhangsan@example.com"
},
{
"id": 2,
"name": "李四",
"email": "lisi@example.com"
}
]
假设我们要根据 id
查询单个用户,或根据 name
搜索用户。
api.php
支持参数<?php
// 1. 连接数据库(同上)
$host = "localhost";
$dbname = "your_database";
$username = "root";
$password = "";
try {
$conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
// 2. 获取请求参数(GET 或 POST)
$id = isset($_GET['id']) ? intval($_GET['id']) : null; // 获取 id 参数
$name = isset($_GET['name']) ? trim($_GET['name']) : null; // 获取 name 参数
// 3. 动态构建 SQL 查询
$sql = "SELECT * FROM users";
$params = []; // 用于预处理语句的参数
if ($id !== null) {
$sql .= " WHERE id = :id";
$params[':id'] = $id;
} elseif ($name !== null) {
$sql .= " WHERE name LIKE :name";
$params[':name'] = "%$name%"; // 模糊搜索
}
$stmt = $conn->prepare($sql);
$stmt->execute($params);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 4. 返回 JSON
header('Content-Type: application/json');
echo json_encode($result, JSON_PRETTY_PRINT);
// 5. 关闭连接
$conn = null;
?>
http://your-server/api.php?id=1
http://your-server/api.php?name=张
没有搜到相关的文章