Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Sambungkan ke DB dengan Kelas PHP tidak berfungsi saat mencoba mengambil hasil

Sebagai Comando::Executar tidak statis, melainkan dideklarasikan sebagai public function... , Anda harus melakukan sesuatu seperti:

$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>';
}

Atau mendeklarasikan metode sebagai statis, yaitu:

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

Dan kemudian Anda dapat menggunakan titik dua ganda (:: ) sintaks:

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

Saya sarankan tidak memanggil buka dan tutup setiap kali Anda menjalankan kueri, melainkan kelas seperti ini:

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);
    }
}

Ini kemudian digunakan sebagai berikut:

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

Ini tidak hanya lebih kecil, tetapi lebih ringan di server karena Anda tidak membuka dan menutup koneksi database secara permanen, mengurangi penggunaan CPU dan penggunaan memori.

Menggunakan properti statis untuk host dll. (menyimpannya dalam memori bahkan setelah __destruct digunakan sehingga Anda tidak perlu mendeklarasikannya kembali setiap saat):

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;");

Menggunakan instance config dari kelas koneksi:

config.php file:

<?php

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

?>

file index.php:

<?php

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

?>

Kelas sekarang memiliki induk di github saya !




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PILIH kolom de-normalisasi menjadi catatan terpisah?

  2. MySQL Socket menolak koneksi setelah ribuan koneksi berturut-turut

  3. Kinerja MySQL:Cara Memanfaatkan Pengindeksan Database MySQL

  4. Multiple While Loop dalam While Loop?

  5. Menggunakan Otomatisasi untuk Mempercepat Tes Rilis di Galera Cluster Dengan ClusterControl