PHP+ODBC从URL获取参数实现Profile页面数据库查询
解决Profile页面的URL参数获取与数据库查询问题
嘿,我来帮你搞定这个问题~ 先理清楚几个关键的调整点:
1. 先正确获取URL里的参数
你的链接是 <a href=index.php?page_id=profile&id=NAME></a>,所以URL里的目标参数是id,不是profile——你之前的代码里误用了$_GET['profile'],这是第一个要修正的地方。
可以先把URL里的id值存到一个变量里,同时做基础的存在性检查:
// 检查id参数是否存在且不为空 if (isset($_GET['id']) && !empty(trim($_GET['id']))) { $targetName = trim($_GET['id']); } else { // 没有参数时的提示或跳转逻辑 echo "请指定要查看的用户"; exit; }
2. 绝对要避免直接拼接用户输入到SQL里!
你原来的SQL语句硬编码了NAME,如果直接替换成变量会有严重的SQL注入风险,一定要用参数绑定(预处理语句)来保证安全。
假设你的$core_db是ADODB类(从Execute方法判断),可以这样写安全的查询:
// 用占位符?定义预处理语句 $stmt = $core_db->Prepare("SELECT ID, Name, Age, Nationality FROM Profiles WHERE Name = ?"); // 执行查询时传入参数,ADODB会自动处理转义 $result = $stmt->Execute([$targetName]);
3. 修正判断逻辑
你原来的if ($_GET['profile'] == 'NAME')是硬编码逻辑,现在可以直接根据查询结果来处理——如果有数据就输出,没有就提示:
if ($result->RecordCount() > 0) { // 取出用户数据,用FetchAssoc获取关联数组更直观 $userData = $result->FetchAssoc(); // 输出你需要展示的档案内容 echo "<h3>用户档案</h3>"; echo "<p>ID:{$userData['ID']}</p>"; echo "<p>姓名:{$userData['Name']}</p>"; echo "<p>年龄:{$userData['Age']}</p>"; echo "<p>国籍:{$userData['Nationality']}</p>"; } else { echo "未找到该用户的档案信息"; }
整合后的完整代码
把所有逻辑整合起来,加上页面判断(确认当前是Profile页面):
// 先确认当前是Profile页面 if (isset($_GET['page_id']) && $_GET['page_id'] == 'profile') { // 检查并获取用户ID参数 if (isset($_GET['id']) && !empty(trim($_GET['id']))) { $targetName = trim($_GET['id']); // 安全查询数据库 $stmt = $core_db->Prepare("SELECT ID, Name, Age, Nationality FROM Profiles WHERE Name = ?"); $result = $stmt->Execute([$targetName]); // 处理查询结果 if ($result->RecordCount() > 0) { $userData = $result->FetchAssoc(); echo "<h2>用户档案</h2>"; echo "<ul> <li>ID:{$userData['ID']}</li> <li>姓名:{$userData['Name']}</li> <li>年龄:{$userData['Age']}</li> <li>国籍:{$userData['Nationality']}</li> </ul>"; } else { echo "<p>抱歉,未找到该用户的信息</p>"; } } else { echo "<p>请选择要查看的用户</p>"; } }
额外小提醒
- 你原来的SQL语句里重复写了两次
Age字段,我已经帮你去掉了重复项。 - 永远不要直接信任用户输入的内容,参数绑定是防范SQL注入的核心手段,一定要养成这个习惯。
内容的提问来源于stack exchange,提问作者Isaac Sabir
相关产品推荐
相关产品推荐

