gpt4 book ai didi

php - 扩展类中的 PDO 查询

转载 作者:行者123 更新时间:2023-11-30 23:03:17 24 4
gpt4 key购买 nike

下面是数据库连接类,但我将通过扩展 PDO 类本身来改进它:

<?php

class db{


private static $instance = NULL;

public function __construct() {
}

public static function getInstance() {

if (!self::$instance)
{
self::$instance = new PDO("mysql:host=localhost;dbname=dbmvc", 'root', '');;
self::$instance-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return self::$instance;
}


private function __clone(){
}

}

?>

扩展类:

<?php 

class Model extends db{


final public function fetchInfo()
{

global $pdo, $db;

$query = $db->prepare("SELECT name FROM table");
$query->execute();

$result = $query -> fetchAll();

foreach( $result as $row )
{
echo $row['name'];
}

}
}

?>

但是我在调​​用这个方法的时候出错了:

 $model=new Model();
$model->fetchInfo();

错误是:

Call to a member function prepare() on a non-object in C:\xampp\htdocs\mvc\model\model.class.php on line 11

我是 PDO 的新手,我试图弄清楚,但我无法在任何地方找到解决方案,任何人都可以提供帮助。谢谢!

最佳答案

这个问题与PDO本身无关,而是与面向对象编程有关。

  • 您声明 global $db,您应该使用 self::$db 或者创建一个不同的实例变量。

  • 在调用方法之前,您没有初始化 $db。您应该将其设置为 self::getInstance()

  • 您声明了对变量global $pdo 的引用,但您从未定义也从未使用过。这只是草率的编码。

  • A model is not a database instance .你应该prefer composition over inheritance在这种情况下。

关于php - 扩展类中的 PDO 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22974103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com