Mysql
 sql >> Base de données >  >> RDS >> Mysql

La connexion à la base de données avec la classe PHP ne fonctionne pas lorsque vous essayez de récupérer les résultats

En tant que Comando::Executar n'est pas statique, mais plutôt déclaré comme public function... , vous devrez faire quelque chose comme :

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

Ou déclarez la méthode comme statique, à savoir :

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

Et puis vous pouvez utiliser les doubles-points (:: ) syntaxe :

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

Je suggérerais non appelant une ouverture et une fermeture à chaque fois que vous exécutez une requête, mais plutôt une classe comme celle-ci :

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

Ceci est ensuite utilisé comme tel :

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

Ce n'est pas seulement plus petit, mais plus léger sur le serveur car vous n'ouvrez pas et ne fermez pas en permanence les connexions à la base de données, ce qui réduit l'utilisation du processeur et de la mémoire.

Utilisation de propriétés statiques pour l'hôte, etc. (les garde en mémoire même après __destruct est utilisé pour ne pas avoir à les re-déclarer à chaque fois) :

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

Utilisation d'une instance de configuration de la classe de connexion :

fichier config.php :

<?php

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

?>

fichier index.php :

<?php

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

?>

La classe a maintenant un parent sur mon github !