PDO tekil sınıf properity olarak saklanır kullanarak

1 Cevap php

OOP beni çıldırtıyor. Ben çalışmak için PDO hareket edemez. İşte benim DB sınıf bulunuyor:

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;
    }
}

Ben böyle bir şey yapmak zaman tamam:

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

Ama bu:

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

Hiçbir şey yapmaz. Yani, yanlış parola / kullanıcı adını kullansanız bile, ben herhangi bir istisna alamadım.

İkinci şey - Siteme "kalbidir" sınıfı vardır:

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() { }

 }

Ben sınıf içinde "yeni DB" kullanmaya çalıştı, ama bu var:

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

Hiçbir şey geri döner.

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

Alıyorum:

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

Gerçekten ben yanlış yapıyorum, kafam karıştı?

Edit:

Tamam, şimdi ben ancak ben hala sorgu / exec kullanamazsınız, properity gibi nesne var.

Edit2:

Öyle tablo (sadece varsayılan değerler) herhangi bir kayıt yoktur ... aptal değilim

1 Cevap

Try public static function &instance.