You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过URL参数查询API?API参数化查询实现方法咨询

实现URL参数过滤JSON结果的PHP方案

哥们儿,要实现通过?id=xxx参数过滤你的API结果其实不难,但一定要注意SQL注入风险,这是后端API的基本红线。我基于你的现有代码给你调整出一个安全且可用的版本:

<?php
// 跨域头(保留你的设置)
header('Access-Control-Allow-Origin: *');
// 明确返回JSON类型的Content-Type,让客户端解析更顺畅
header('Content-Type: application/json');

include 'connect.php';

if (!$con) {
    die(json_encode(['error' => 'Could not connect to database']));
}

// 1. 安全获取URL参数:先检查参数是否存在,避免Undefined Index错误
$targetId = isset($_GET['id']) ? trim($_GET['id']) : '';

// 如果没有传id参数,返回友好的错误提示(也可以改成返回所有结果,按需调整)
if (empty($targetId)) {
    echo json_encode(['error' => 'Missing required parameter: id']);
    exit;
}

// 2. 使用预处理语句执行查询(绝对不能直接把$_GET['id']拼进SQL!)
// 这里假设你的表名是`your_table`,id字段是`id`,根据实际情况修改
$query = "SELECT * FROM your_table WHERE id = ?";
$stmt = mysqli_prepare($con, $query);

// 绑定参数:"s"表示字符串类型,如果你的id是数字就改成"i"
mysqli_stmt_bind_param($stmt, "s", $targetId);
mysqli_stmt_execute($stmt);

// 获取查询结果
$result = mysqli_stmt_get_result($stmt);
$output = [];

// 将数据库结果转化为数组
while ($row = mysqli_fetch_assoc($result)) {
    $output[] = $row;
}

// 3. 输出JSON结果
echo json_encode($output);

// 清理资源,养成良好编码习惯
mysqli_stmt_close($stmt);
mysqli_close($con);
?>

关键要点解释:

  • 参数校验:先用isset检查id参数是否存在,再用trim去除首尾空格,避免无效输入导致的异常
  • 防SQL注入:使用mysqli的预处理语句(prepare+bind_param),把参数和SQL语句完全分离,彻底杜绝注入风险。如果你的id是数字类型,把绑定参数的"s"改成"i"即可
  • Content-Type头:新增header('Content-Type: application/json'),让前端明确知道返回的是JSON格式,避免解析混乱
  • 错误处理:把原来的纯文本报错改成JSON格式的错误信息,让前端更容易捕获和处理错误情况
  • 资源清理:用完数据库语句和连接后主动关闭,避免资源泄漏

你只需要把代码里的your_table改成你实际使用的表名,id字段如果不是这个名字也对应修改,就能直接部署使用啦。

内容的提问来源于stack exchange,提问作者Aaron Strickland

火山引擎 最新活动