PHP连接MySQL时出现Undefined variable $pdo错误求助
问题分析与修复方案
错误根源
- dbh.inc.php 语法错误:变量定义行末尾缺少分号,PHP解析失败,无法生成$pdo实例
- PDO方法名大小写错误:
setATTRibute应为setAttribute,大小写不匹配导致属性设置失败 - 连接错误未终止脚本: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
相关产品推荐
相关产品推荐

