一条错误消息,指出“未捕获错误:调用未定义的方法数据库”当尝试在单独的类中使用 PDO 连接时,可能会出现 ::prepare()"。此错误源于对面向对象编程 (OOP) 如何互连对象的误解。
1.重新思考您的数据库类:
现有的数据库类没有任何意义。相反,如果它扩展了 PDO 的功能,则应专注于创建包装类。
2.建立中央数据库连接:
使用 PDO 或增强的数据库类实例化独立的 $db 对象。这个单一连接将作为所有未来数据库活动的基石。
3.将连接作为构造函数参数传递:
每个需要数据库访问的类都应该接收 $db 连接作为构造函数参数。这种方法保证了整个应用程序对数据库的无缝访问。
考虑以下改进代码库:
database.php:
$host = '127.0.0.1'; $db = 'test'; $user = 'root'; $pass = ''; $charset = 'utf8'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $opt = [ \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION, \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC, \PDO::ATTR_EMULATE_PREPARES => false, ]; $pdo = new \PDO($dsn, $user, $pass, $opt);
u ser.php:
class User { /* Properties */ private $conn; /* Get database access */ public function __construct(\PDO $pdo) { $this->conn = $pdo; } /* List all users */ public function getUsers() { return $this->conn->query("SELECT username, usermail FROM user")->fetchAll(); } }
app.php:
include 'database.php'; $user = new User($pdo); $list = $user->getUsers(); foreach($list as $test) { echo $test["username"],"\n"; }
这个精炼的代码库举例说明了多个类中 PDO 连接的正确使用,确保无错误操作和优雅的编码实践。
以上是如何在 PHP 中跨多个类正确使用 PDO 连接?的详细内容。更多信息请关注PHP中文网其他相关文章!