Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Połącz z bazą danych z klasą PHP nie działa podczas próby pobrania wyników

Jako Comando::Executar nie jest statyczna, ale zadeklarowana jako public function... , będziesz musiał zrobić coś takiego jak:

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

Lub zadeklaruj metodę jako statyczną, a mianowicie:

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

Następnie możesz użyć podwójnego dwukropka (:: ) składnia:

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

Sugerowałbym nie wywołanie open i close za każdym razem, gdy uruchamiasz zapytanie, ale raczej klasę taką jak ta:

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

To jest następnie używane jako takie:

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

Jest to nie tylko mniejsze, ale i lżejsze na serwerze, ponieważ nie otwierasz i nie zamykasz połączeń z bazą danych na stałe, zmniejszając użycie procesora i pamięci.

Używanie statycznych właściwości dla hosta itp. (przechowuje je w pamięci nawet po __destruct jest używany, więc nie trzeba ich ponownie deklarować za każdym razem):

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

Używając instancji konfiguracyjnej klasy połączenia:

plik config.php:

<?php

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

?>

plik index.php:

<?php

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

?>

Klasa ma teraz rodzica na moim githubie !




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego podczas łączenia się z MySQL za pomocą Javy (Netbeans) pojawia się błąd „Communications link Failure Ostatni wysłany pakiet...”?

  2. Jak zsumować zduplikowane wartości z tabeli mysql

  3. Apostrofy i dwukropki w ładnych linkach

  4. Czy singleton byłby dobrym wzorcem projektowym dla witryny mikroblogowej?

  5. wyjątek zepsutego potoku z MySql w aplikacji Grails