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

使用PDO查询数据库时prepare()调用报错,如何定义$db变量?

问题:如何定义$db变量以解决PDO prepare()调用错误?

我尝试使用connection_pdo.php文件中的$dsn变量,消除了未定义变量的提示,但prepare()调用的致命错误仍然存在。查阅PDO::prepare文档时,里面的$dbh变量完全没有解释。

错误信息:

Notice: Undefined variable: db in C:\xampp\htdocs\kami715\A10\customers.php on line 14
Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\kami715\A10\customers.php:14 Stack trace: #0 {main} thrown in C:\xampp\htdocs\kami715\A10\customers.php on line 14

查询数据代码(customers.php):

<!--query to pull in data-->
<?php
 include('connection_pdo.php');
  $query = "SELECT id, first_name, last_name FROM customers ORDER BY last_name asc";
  $stmt = $db->prepare($query);
  $stmt->execute();
  $stmt->store_result();
?>

数据库连接代码(connection_pdo.php):

<?php

// set up for using PDO
$user = 'root';
$pass = 'admin';
$host = 'localhost';
$db_name = 'grangerinc';

// set up DSN
$dsn = "mysql:host= $host; dbname= $db_name";

?>

解决方法

核心问题是没有创建PDO数据库连接实例,$db变量根本未定义,而$dsn只是连接字符串,不是可用的PDO操作对象。

步骤1:修改connection_pdo.php,创建PDO实例

在connection_pdo.php中,用$dsn、用户名和密码初始化PDO对象,并赋值给$db变量:

<?php
// set up for using PDO
$user = 'root';
$pass = 'admin';
$host = 'localhost';
$db_name = 'grangerinc';

// 注意DSN中不要加多余空格,避免连接失败
$dsn = "mysql:host=$host;dbname=$db_name";

// 创建PDO连接实例并设置错误模式
try {
    $db = new PDO($dsn, $user, $pass);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("数据库连接失败: " . $e->getMessage());
}
?>

步骤2:调整customers.php中的代码

PDO没有store_result()方法(这是mysqli的方法),直接通过fetch()或fetchAll()获取数据即可:

<!--query to pull in data-->
<?php
 include('connection_pdo.php');
 $query = "SELECT id, first_name, last_name FROM customers ORDER BY last_name asc";
 $stmt = $db->prepare($query);
 $stmt->execute();
 // 获取所有结果为关联数组格式
 $customers = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

关于文档中的$dbh变量

文档里的$dbh只是一个变量名,代表PDO连接实例,你可以用任意变量名(比如你用的$db),本质都是PDO对象,用来调用prepare()、query()等PDO方法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:15:34