Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Kết nối với DB bằng Lớp PHP không hoạt động khi cố gắng truy xuất kết quả

Comando::Executar không phải là tĩnh, mà được khai báo là public function... , bạn sẽ phải làm một số việc như:

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

Hoặc khai báo phương thức là static, cụ thể là:

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

Và sau đó bạn có thể sử dụng dấu hai chấm (:: ) cú pháp:

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

Tôi sẽ đề nghị không gọi một mở và đóng mỗi khi bạn chạy một truy vấn, mà là một lớp như thế này:

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

Sau đó, điều này được sử dụng như sau:

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

Điều này không chỉ nhỏ hơn mà còn nhẹ hơn trên máy chủ vì bạn không phải mở và đóng vĩnh viễn các kết nối cơ sở dữ liệu, giảm việc sử dụng CPU và sử dụng bộ nhớ.

Sử dụng thuộc tính tĩnh cho máy chủ, v.v. (giữ chúng trong bộ nhớ ngay cả sau __destruct được sử dụng nên bạn không cần khai báo lại chúng mỗi lần):

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

Sử dụng phiên bản cấu hình của lớp kết nối:

tệp config.php:

<?php

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

?>

tệp index.php:

<?php

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

?>

Lớp hiện có cha trên github của tôi !




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để sao lưu một bảng trong cơ sở dữ liệu MySQL?

  2. Mysql TRƯỜNG HỢP KHÔNG TÌM HIỂU CHO BÁO CÁO TÌNH HUỐNG trên một quy trình đã lưu trữ

  3. Cách đối phó với độ dài dòng khổng lồ được tạo bởi mysqldump

  4. chỉ định id người dùng php không hoạt động

  5. Làm cách nào để triển khai commit / rollback cho MySQL trong PHP?