Доброе утро.
Я пытаюсь сделать класс 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 !