如何使用PHP获取被点击链接对应的名称ID并用于数据库查询
如何在PHP中传递并获取点击链接对应的名称ID?
我来给你一步步讲清楚怎么实现,核心就是把对应的name_id通过URL参数传递到page.php,再在目标页面安全地获取并使用这个参数:
1. 修改生成链接的代码,带上name_id参数
你之前的while循环里生成的链接没传递ID,得把每个名称对应的name_id加到URL里。比如把循环里的链接代码改成这样:
// 假设你从查询结果里拿到的行数据存在$row变量中,包含id和name字段 while ($row = mysqli_fetch_assoc($result)) { $name_id = $row['id']; $name = $row['name']; echo "$name_id = <a href='page.php?name_id=$name_id'>$name</a> "; }
这样生成的链接会变成page.php?name_id=01、page.php?name_id=02这类形式,点击时就会把对应ID带过去。
2. 在page.php中安全获取name_id参数
到了page.php,你可以通过$_GET全局数组获取URL里的name_id,但千万不能直接用原始值拼SQL,会有SQL注入风险。先做类型校验和过滤:
// 检查参数是否存在,同时转为整数(因为ID是数字类型) $name_id = isset($_GET['name_id']) ? intval($_GET['name_id']) : 0; // 如果ID为0,说明没有传递有效参数,做错误处理 if ($name_id === 0) { echo "请选择有效的名称"; exit; }
3. 使用预处理语句执行查询(关键!防注入)
接下来用预处理语句执行查询,这是最安全的做法,以mysqli为例:
// 假设你已经建立了数据库连接$conn $sql = "SELECT * FROM database.table WHERE name_id = ?"; $stmt = mysqli_prepare($conn, $sql); // 绑定参数,"i"表示参数是整数类型 mysqli_stmt_bind_param($stmt, "i", $name_id); // 执行语句 mysqli_stmt_execute($stmt); // 获取查询结果 $result = mysqli_stmt_get_result($stmt); // 处理结果 if ($row = mysqli_fetch_assoc($result)) { // 输出或使用该名称的属性 print_r($row); } else { echo "没有找到对应的信息"; } // 关闭语句和连接 mysqli_stmt_close($stmt); mysqli_close($conn);
如果用PDO的话思路类似,核心都是用占位符代替直接拼接参数,彻底避免SQL注入风险。
内容的提问来源于stack exchange,提问作者Willliam A
相关产品推荐
相关产品推荐

