PDO使用singleton存储为类属性

时间:2010-05-23 10:04:50

标签: php oop singleton pdo

OOP让我抓狂。我无法移动PDO工作。这是我的DB类:

class DB extends PDO
{
    public function &instance($dsn, $username = null, $password = null, $driver_options = array())
    {
        static $instance = null;
        if($instance === null)
        {
            try
            {
                $instance = new self($dsn, $username, $password, $driver_options);
            }
            catch(PDOException $e)
            {
                throw new DBException($e->getMessage());
            }
        }
        return $instance;
    }
}

当我做这样的事情时,没关系:

try
{
  $db = new DB(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
 }
 catch(DBException $e)
 {
  echo $e->getMessage();
 }

但是这个:

try
 {
  $db = DB::instance(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
 }
 catch(DBException $e)
 {
  echo $e->getMessage();
 }

什么都不做。我的意思是,即使我使用错误的密码/用户名,我也没有任何例外。

第二件事 - 我的课程是我网站的“心脏”:

class Core
 {
  static private $instance;

  public $db;

  public function __construct()
  {
   if(!self::$instance)
   {
    $this->db = DB::instance(DB_TYPE.':hpost='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
   }
      return self::$instance;
  }
  private function __clone() { }

 }

我试过在课堂上使用“新数据库”,但是这个:

$r = $core->db->query("SELECT * FROM me_config");
print_r($r->fetch());

什么都不返回。

$sql = "SELECT * FROM me_config";
print_r($core->db->query($sql));

我明白了:

PDOStatement Object ( [queryString] => SELECT * FROM me_config ) 

我真的很困惑,我做错了什么?

编辑:

好的,现在我已经将对象视为正确,但我仍然无法使用query / exec。

EDIT2:

我太笨了......这张桌子没有任何记录(只有默认值)

1 个答案:

答案 0 :(得分:1)

尝试public static function &instance

相关问题