PDO, использующий синглтон, сохраненный как правильность класса - PullRequest
2 голосов
/ 23 мая 2010

ООП сводит меня с ума. Я не могу переместить PDO на работу. Вот мой класс БД:

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 ) 

Я действительно запутался, что я делаю не так?

Edit:

Хорошо, теперь у меня есть объект как правильность, однако я все еще не могу использовать query / exec.

Edit2:

Я такой тупой ... В таблице нет записей (только значения по умолчанию)

1 Ответ

1 голос
/ 23 мая 2010

Попробуйте public static function &instance.

...