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

PHP连接MySQL时出现Undefined variable $pdo错误求助

问题分析与修复方案

错误根源

  1. dbh.inc.php 语法错误:变量定义行末尾缺少分号,PHP解析失败,无法生成$pdo实例
  2. PDO方法名大小写错误:setATTRibute应为setAttribute,大小写不匹配导致属性设置失败
  3. 连接错误未终止脚本:dbh.inc.php的catch块仅输出错误但未终止,导致formhandler.inc.php继续执行时$pdo未定义

修复后的代码

1. 修正 dbh.inc.php

<?php

$dsn = "mysql:host=localhost;dbname=myfirstdatabase";
$dbusername = "root";
$dbpassword = "root";

try {
    $pdo = new PDO($dsn, $dbusername, $dbpassword);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("connection failed: " . $e->getMessage());
}
  • 给$dbusername和$dbpassword的定义行添加分号
  • 修正setATTRibute为标准写法setAttribute
  • 用die()替代echo,确保连接失败时直接终止脚本,避免后续错误

2. 优化 formhandler.inc.php(可选)

<?php

if($_SERVER["REQUEST_METHOD"] == "POST" ) {
    $username = $_POST["username"];
    $pwd = $_POST["pwd"];
    $email = $_POST["email"];
    
    try {
        require_once "dbh.inc.php";

        $query  = "INSERT INTO users (username, pwd, email) VALUES (?, ?, ?);";

        $stmt = $pdo->prepare($query);
        $stmt->execute([$username, $pwd, $email]);

        $pdo = null;
        $stmt = null;
        header("Location: ../index.php");
        exit();
    } catch (PDOException $e) {
        die("query failed: " . $e->getMessage());
    }
} else {
    header("Location: ../index.php");
    exit();
}
  • 统一用exit()替代die()(跳转场景更常用)
  • 调整SQL语句格式,避免不必要的换行

额外建议

  • 确认myfirstdatabase数据库已创建,且users表包含username、pwd、email字段
  • 禁止明文存储密码,使用password_hash($pwd, PASSWORD_DEFAULT)加密后再存入数据库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:33:16