如何通过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




