sql >> データベース >  >> RDS >> Mysql

結果を取得しようとすると、PHPクラスを使用したDBへの接続が機能しません

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

    次に、二重コロンを使用できます(:: )構文:

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

    しないことをお勧めします クエリを実行するたびにopenとcloseを呼び出しますが、次のようなクラスを呼び出します。

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

    これは、データベース接続を永続的に開いたり閉じたりすることがないため、サーバー上で小型であるだけでなく軽量であり、CPU使用量とメモリ使用量を削減します。

    ホストなどの静的プロパティを使用します(__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;");
    
    ?>
    

    これで、クラスの親が mygithub になりました。 !




    1. MySQLレプリケーションを使用した地理分散データベースクラスターのセットアップ

    2. 2つの日付間の営業時間を計算します

    3. MySQLで行を列に転置する

    4. PHPとMySQL:SET @rank=0を使用するにはどうすればよいですか。 $query=で