Пустой mysqli объект в нестатичном свойстве класса

Не знаю как правильно описать проблему, из кода думаю будет все понятно.

Есть метод:
public function DBConnect() {
        $this->db = new mysqli(self::DBHOST, self::DBUSER, self::DBPASS, self::DBNAME);
        if ($this->db->connect_errno) {
            die($this->db->connect_error);
        } else {
            $this->db->query("SET NAMES utf8");
        }
}


В результате подключения в свойстве $this->db оказывается пустой mysqli объект. Соответственно, свойство connect_errno в нем пустое и код продолжает работать так, как будто соединение работает.

class mysqli#3 (19) {
  public $affected_rows =>
  NULL
  public $client_info =>
  NULL
  public $client_version =>
  int(50011)
  public $connect_errno =>
  int(0)
  public $connect_error =>
  NULL
  public $errno =>
  NULL
  public $error =>
  NULL
  public $error_list =>
  NULL
  public $field_count =>
  NULL
  public $host_info =>
  NULL
  public $info =>
  NULL
  public $insert_id =>
  NULL
  public $server_info =>
  NULL
  public $server_version =>
  NULL
  public $stat =>
  NULL
  public $sqlstate =>
  NULL
  public $protocol_version =>
  NULL
  public $thread_id =>
  NULL
  public $warning_count =>
  NULL
}


В результате чего выводятся ошибки типа:

Couldn't fetch mysqli

Если же создавать объект в статичном свойстве, то все нормально:

public function DBConnect() {
        self::$db = new mysqli(self::DBHOST, self::DBUSER, self::DBPASS, self::DBNAME);
        if (self::$db->connect_errno) {
            die(self::$db->connect_error);
        } else {
            self::$db->query("SET NAMES utf8");
        }
}


Я что-то не понимаю и так должно быть? Или ...?
P.S. PHP 5.5.7
  • Вопрос задан
  • 2538 просмотров
Пригласить эксперта
Ответы на вопрос 1
Т.е. после этой строчки
$this->db = new mysqli(self::DBHOST, self::DBUSER, self::DBPASS, self::DBNAME);


var_dump выдает вам пустой объект?

А после этой
self::$db = new mysqli(self::DBHOST, self::DBUSER, self::DBPASS, self::DBNAME);


не пустой?

И константы вы все проверили одинаково заполнены в обоих случаях?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы