扩展类中的PDO查询

时间:2014-04-09 21:15:01

标签: php mysql pdo extends

下面是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的新手,我试图解决它,但我无法在任何地方找到解决方案,任何人都可以提供帮助。 TNX!

2 个答案:

答案 0 :(得分:0)

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

  • 您声明global $db您应该使用self::$db或者制作不同的实例变量。

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

  • 您声明对您永远不会定义且永远不会使用的变量global $pdo的引用。这只是草率的编码。

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

答案 1 :(得分:0)

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