Подключиться к БД с классом PHP не работает, когда пытаешься получить результаты

Доброе утро.

Я пытаюсь сделать класс DB для подключения и получения результатов из моей БД. Итак, я думаю, что с классом все хорошо. Но результаты не появятся.

Вот мой класс DB:

<?php class Conexao { var $host = "localhost"; var $usuario = "root"; var $senha = "xxxxxx"; var $banco = 'restaurante'; private $mysqli; public function Abrir() { $this->mysqli = new mysqli($this->host, $this->usuario, $this->senha, $this->banco); } public function Fechar() { $this->mysqli->close(); } } class Comando { public function Executar($sql) { $con = new Conexao(); $con->Abrir(); $re = $con->mysqli->query($sql); $con->Fechar(); return $re; } } ?> 

И вот где я пытаюсь получить результаты:

 <?php $queryMesasAtivas = Comando::Executar('SELECT * FROM mesas WHERE status =1 AND numero !="'.$_SESSION["mesa"].'"'); if ($queryMesasAtivas->num_rows > 0) { while ($rowMesasAtivas = $queryMesasAtivas->fetch_assoc()) { echo "<option value='".$rowMesasAtivas['numero']."'>Mesa ".$rowMesasAtivas['numero']."</option>"; } } else { echo '<option>Nenhuma mesa ativa</option>'; } ?> 

Я пробовал некоторые изменения, но ничего не меняется. Каждый раз он все еще не работает. Что не так?

Поскольку Comando::Executar не является статичным, а скорее объявляется public function... , вам нужно будет сделать что-то вроде:

 $comando = new Comando(); $queryMesasAtivas = $comando->Executar('SELECT * FROM mesas WHERE status =1 AND numero !="'.$_SESSION["mesa"].'"'); if ($queryMesasAtivas->num_rows > 0) { while ($rowMesasAtivas = $queryMesasAtivas->fetch_assoc()) { echo "<option value='".$rowMesasAtivas['numero']."'>Mesa ".$rowMesasAtivas['numero']."</option>"; } } else { echo '<option>Nenhuma mesa ativa</option>'; } 

Или объявите метод статическим, а именно:

 public static function Executar($sql) { $con = new Conexao(); $con->Abrir(); $re = $con->mysqli->query($sql); $con->Fechar(); return $re; } 

И тогда вы можете использовать синтаксис double colon ( :: :):

 $queryMesasAtivas = Comando::Executar('SELECT * FROM mesas WHERE status =1 AND numero !="'.$_SESSION["mesa"].'"'); 

Я бы предложил не открывать и закрывать каждый раз, когда вы запускаете запрос, а скорее такой класс:

 class Conexao { private $link; public function __construct($host = null, $username = null, $password = null, $dbName = null) { $this->link = mysqli_init(); $this->link->real_connect($host, $username, $password, $dbName) or die("Failed to connect"); } public function __destruct() { $this->link->close(); } public function Query($sql) { return $this->link->query($sql); } } 

Затем это используется как таковое:

 $conexao = new Conexao("host", "username", "password", "db_name"); $result = $conexao->Query("SELECT * FROM `table` WHERE 1 ORDER BY `id` ASC;"); 

Это не только меньше, но и облегчает работу на сервере, потому что вы не постоянно открываете и закрываете соединения с базой данных, уменьшая использование ЦП и использование памяти.

Использование статических свойств для хоста и т. Д. ( __destruct их в памяти даже после использования __destruct поэтому вам не нужно каждый раз их __destruct ):

 class Conexao { private $link; private static $host, $username, $password, $dbName; public function __construct($host = null, $username = null, $password = null, $dbName = null) { static::$host = $host ? $host : static::$host; static::$username = $username ? $username : static::$username; static::$password = $password ? $password : sattic::$password; static::$dbName = $dbName : $dbName : static::$dbName; $this->link = mysqli_init(); $this->link->real_connect(static::$host, static::$username, static::$password, static::$dbName) or die("Failed to connect"); } public function __destruct() { $this->link->close(); } public function Query($sql) { return $this->link->query($sql); } } $conexao = new Conexao("host", "username", "password", "db_name"); $result = $conexao->Query("SELECT * FROM `table` WHERE 1 ORDER BY `id` ASC;"); $conexao->__destruct(); // Destroy the class $conexao = new Conexao(); // Reinitialise it $result = $conexao->Query("SELECT * FROM `table` WHERE 1 ORDER BY `id` ASC;"); 

Использование экземпляра конфигурации класса подключения:

Файл config.php:

 <?php require_once 'path/to/Conexao.php'; $conexao = new Conexao("host", "username", "password", "db_name"); ?> 

Файл index.php:

 <?php require_once 'config.php'; $result = $conexao->Query("SELECT * FROM `table` WHERE 1 ORDER BY `id` ASC;"); ?> 

У класса теперь есть родитель на моем github !