PHP PDO 运行代码时$_GET['id']行持续报错排查求助
问题定位
- 首要报错原因:你访问当前PHP页面的URL中没有携带
id查询参数,导致$_GET['id']读取时找不到对应的数组键,触发PHP警告。如果你的PHP版本配置了严格错误提示,这个警告会直接中断程序执行。 - 附带隐藏风险:你直接将未校验的
$id拼接进SQL语句,存在严重的SQL注入漏洞,攻击者可通过构造特殊id参数窃取、篡改数据库内容。 - 额外代码问题:页面输出的HTML标签存在语法错误,比如
<td>结束标签误写为</th>、部分<tr>标签缺失,会导致页面渲染异常。
解决方案
1. 修复参数读取逻辑,增加参数存在性校验
把原来的$id = $_GET['id'];替换为如下代码:
// 校验id参数是否存在且为正整数 if (!isset($_GET['id']) || !is_numeric($_GET['id']) || $_GET['id'] <= 0) { // 参数非法时跳转到列表页或提示错误 header('Location: index.php'); exit(); } $id = (int)$_GET['id'];
2. 使用PDO预处理语句替代直接SQL拼接,修复注入风险
把原来的$data = $conn->query("SELECT * FROM Series WHERE id = " . $id)->fetchAll();替换为预处理写法:
$stmt = $conn->prepare("SELECT * FROM Series WHERE id = ?"); $stmt->execute([$id]); $data = $stmt->fetchAll();
3. 修复HTML标签语法错误
调整输出逻辑里的标签写法,统一匹配开闭标签,比如把所有误写的</th>替换为对应</td>,补充缺失的<tr>标签即可。
内容的提问来源于stack exchange,提问作者Jean
相关产品推荐
相关产品推荐

