下面是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!
答案 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