使用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
相关产品推荐
相关产品推荐

