You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL SELECT语句中设置PHP变量并拼接至API GET请求

代码修复方案

核心问题修正点

  • 表单提交方法为GET,原代码错误使用$_POST获取参数,无法拿到用户传入的设备ID
  • cURL请求URL存在引号嵌套错误、多余空格与重复斜杠,且未对SQL查询参数做URL编码,会导致API无法识别请求
  • 原cURL代码缺少执行、错误捕获、资源关闭逻辑,无法正常获取返回结果
  • 原HTML表单提交按钮存在重复class属性的语法错误,且未做基础输入校验
  • 原代码未对用户输入做转义校验,存在SQL语法错误与注入风险

修正后完整代码

HTML表单部分

修复重复class问题,保留原GET提交逻辑,增加基础前端校验:

<fieldset>
  <legend>Search by ID</legend>
  <form method="GET" action="search_device42ID.php">
    <input type="text" name="deviceid" value="" required>
    <input type="submit" name="btnsubmit" class="button-device42 mybutton" value="Device42 Search">
  </form>
</fieldset>
<br>
<br>

PHP后端部分(search_device42ID.php)

<?php
// 校验参数是否传入
if (!isset($_GET['deviceid']) || empty(trim($_GET['deviceid']))) {
    exit("请输入设备ID后提交");
}
$deviceid = trim($_GET['deviceid']);
// 校验设备ID格式,根据实际业务调整规则,示例为数字ID校验
if (!is_numeric($deviceid)) {
    exit("设备ID格式错误,必须为数字");
}

// 构造PostgreSQL查询语句,转义用户输入避免语法错误
$query = sprintf(
    "SELECT * FROM view_device_v1 WHERE view_device_v1.device_pk = '%s'",
    addslashes($deviceid)
);

// 初始化cURL,拼接合法请求URL
$curl = curl_init();
// 注意:如果你的API查询参数名不是query,请对照接口文档替换参数名
$apiUrl = sprintf(
    'https://example.com/services/data/v1.0/query/?query=%s',
    urlencode($query) // 对SQL语句做URL编码,避免特殊字符破坏请求结构
);

curl_setopt_array($curl, array(
  CURLOPT_URL => $apiUrl,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30, // 替换原无限等待配置,设置合理超时时间避免脚本卡死
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'GET',
  // 若API需要身份校验,在此添加对应请求头,例如Basic鉴权:
  // CURLOPT_HTTPHEADER => array('Authorization: Basic ' . base64_encode('api账号:api密码')),
));

// 执行请求并处理结果
$response = curl_exec($curl);
$requestError = curl_error($curl);
curl_close($curl);

if ($requestError) {
    exit("API请求失败:" . $requestError);
}

// 输出返回结果,可根据接口返回格式做后续解析(如json转数组)
echo "API返回结果:<pre>";
print_r($response);
echo "</pre>";
?>

额外说明

  • 如果你希望改用POST方式提交表单,只需要把HTML表单的method="GET"改成method="POST",同时PHP端把$_GET全量替换为$_POST即可
  • 代码中默认查询参数名为query,如果你的API文档规定了其他参数名(比如q、sql),直接替换URL里的参数名即可
  • 如果API返回JSON格式数据,可以用json_decode($response, true)把结果转成PHP数组方便后续处理

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:39:15