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

PHP开发动态个人资料页持续报错 附代码及数据库结构

问题分析及修复方案

核心错误点

  • 数据库名不匹配:SQL导出文件创建的数据库名为bitr2,但PHP代码中连接的数据库名为bitr,无法读取到对应库的用户表
  • SQL语法错误:gebruikersnaam是字符串类型字段,直接拼接$username变量没有加单引号包裹,SQL会将传入的用户名识别为字段名而非查询值,触发语法报错
  • PDO使用不规范:直接将用户传入的$_GET['user']参数拼接进SQL语句,既容易触发语法错误,也存在SQL注入风险
  • 缺少参数校验:未判断GET参数user是否存在,参数为空时会触发额外报错
  • 跳转逻辑未终止执行:header('Location: login.php')之后没有加exit终止代码运行,未登录用户仍能执行后续查询逻辑

修复后的完整代码

<?php
$host = 'localhost';
// 修正数据库名和导出文件一致
$db   = 'bitr2';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';

try {
     $connect = new PDO("mysql:host=$host;dbname=$db;charset=$charset", $user, $pass);
     $connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
     die("数据库连接失败:" . $e->getMessage());
}

session_start();
if (empty($_SESSION["userID"])) {
    header('Location: login.php');
    exit;
}

// 校验参数是否存在
if (!isset($_GET['user']) || trim($_GET['user']) === '') {
    die("缺少用户查询参数");
}
$username = $_GET['user'];
// 使用PDO参数绑定,避免拼接SQL
$datapdo2 = "SELECT * FROM users WHERE gebruikersnaam = ?";
$stmtpdo2 = $connect->prepare($datapdo2);
// 执行时传入参数,PDO会自动处理引号和转义
$stmtpdo2->execute([$username]);
$rowpdo2 = $stmtpdo2->fetchAll(PDO::FETCH_ASSOC);
foreach ($rowpdo2 as $users) {
    echo "<tr>";
    // 输出加htmlspecialchars避免XSS攻击
    echo "<th>" . htmlspecialchars($users['omschrijving']) . "</th>";
    echo "</tr>";
}
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:45:04