【问题标题】:PDO query in extended class扩展类中的 PDO 查询
【发布时间】:2014-05-23 08:05:33
【问题描述】:

下面是 db 连接类,但我将通过扩展 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 的新手,我想弄清楚但我无法在任何地方找到解决方案,谁能帮忙。天呐!

【问题讨论】:

    标签: php mysql pdo extends


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • tnx 很多,我一定会听你的建议!
    【解决方案2】:

    如果您想查看此类对象的非常好的示例,我建议您查看 GitHub 上 panique 的 PHP-Login 脚本中的 Database Class。以及来自同一组脚本的 Model class。我希望这会有所帮助:D

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 2019-03-01
      • 2011-03-26
      • 2016-06-27
      • 1970-01-01
      • 2023-03-20
      • 2016-11-09
      • 2016-01-03
      • 1970-01-01
      相关资源
      最近更新 更多