PDO Подключение к проблемам с БД - PullRequest
6 голосов
/ 19 сентября 2011

Мне нужно знать, допустимо ли написанное мной расширение PDO как синтаксически, так и семантически. Я выполнял var_dumping () мои переменные соединения, и хотя переменные передаются в конструктор (с правильными значениями), я не могу получить что-либо из моей базы данных.

Я исследовал класс PDO в руководстве по PHP, и из того, что я обнаружил, класс, который я использую, практически идентичен классу расширения, указанному в разделе примеров на странице вики.

Вот мой код:

class DBConnector extends PDO
    {
        private $host;
        private $username;
        private $password;
        private $db;
        private $dns;

        public function __construct($host, $username, $password, $db)
        {
            $this->host = $host;
            $this->username = $username;
            $this->password = $password;
            $this->db = $db;

            $this->dns = "mysql:dbname=".$this->db.";host=".$host;
            $connection = parent::__construct($this->dns, $this->username, $this->password);

        }
    }

А вот тестовый запрос, который возвращает массив с ... ничем внутри него. В базе данных есть данные, поэтому, очевидно, что-то не так.

function testQuery()
{
    global $connection;

    $query = "
        SELECT * FROM users
    ";

    $stmt = $connection->prepare($query);

    $result = $stmt->fetchAll();


}

Я что-то не так делаю?

Ответы [ 2 ]

11 голосов
/ 19 сентября 2011

Попробуйте это:

class DBConnector extends PDO
{
  private $connection;
  private $host;
  private $username;
  private $password;
  private $db;
  private $dns;

  public function __construct($host, $username, $password, $db)
  {
      $this->host = $host;
      $this->username = $username;
      $this->password = $password;
      $this->db = $db;
      $this->dns = "mysql:dbname=".$this->db.";host=".$host;
      $this->connection = parent::__construct($this->dns, $this->username, $this->password);
      $this->setAttribute (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  }

  public function testQuery()
  {
      $query = "SELECT * FROM a";
      $stmt = $this->prepare($query);
      if($stmt->execute()){
          return $stmt->fetchAll();
      }
      return array();
  }
}

$tg = new DBConnector('localhost', 'root', '', 'test');
$t = $tg->testQuery();
print_r($t);

соединение $ локально для конструкции DBConnector :: __, и я не вижу там глобальных изменений. Так что он не будет существовать в вашей функции testQuery. Переместив свою функцию в класс и создав свойство соединения, его легко использовать.

3 голосов
/ 19 сентября 2011

Вам необходимо выполнить запрос.

function testQuery()
{
    global $connection;

    $query = "
        SELECT * FROM users
    ";

    $stmt = $connection->prepare($query);

    if($stmt->execute()){

       $result = $stmt->fetchAll();

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...