Mysql
 sql >> база данни >  >> RDS >> Mysql

Фатална грешка:Извикване на член на функция query() PHP CLASS

Вашият метод:

public function db_connect() {    

            $connection = mysqli_connect(self::$db_host, self::$db_user, self::$db_pass, self::$db_name) or die("Error " . mysqli_error($connection)); 
            echo "Conexión realizada". "<br>";

    }  

не връща $connection обратно от метода, така че останалите извиквания на метод се провалят, направете това:

public function db_connect() {    

            $connection = mysqli_connect(self::$db_host, self::$db_user, self::$db_pass, self::$db_name) or die("Error " . mysqli_error($connection)); 
            echo "Conexión realizada". "<br>";
           return $connection; // return the $connection object
    }  

Както споменахме, вашият код не е ефективен, тъй като за всяка извършена заявка кодът (повторно) се свързва с DB. Това е ненужно скъпо/неефективно.

Има много подходи за решаване на това.

  1. Свържете се с DB при инстанцирането на класа DB

напр.

class Db{

    private static $db_host = "localhost";
    private static $db_user = "root";
    private static $db_pass = "";
    private static $db_name = "sivi";

    public $connection;

    public function __construct()
   {
      $this->connection = $this->db_connect();
   }  

    public function db_connect() {    

            $connection = mysqli_connect(self::$db_host, self::$db_user, self::$db_pass, self::$db_name) or die("Error " . mysqli_error($connection)); 
            echo "Conexión realizada". "<br>";
            return $connection;
    }  
}
  1. Мерзелива връзка, т.е. свързване само при първата изпълнена заявка

напр.

class Db{

    private static $db_host = "localhost";
    private static $db_user = "root";
    private static $db_pass = "";
    private static $db_name = "sivi";
    public $connection = null;
    public function __construct()
    {
    }  
    public function db_connect() {    
        $connection = mysqli_connect(self::$db_host, self::$db_user, self::$db_pass, self::$db_name) or die("Error " . mysqli_error($connection)); 
        echo "Conexión realizada". "<br>";
        return $connection;
    }  
    public function db_query($query){
        if ( null ==== $this->connection ) $this->connection = $this->db_connect();
        var_dump($query);
        $result = $this->connection->query($query);
        while($row = mysqli_fetch_array($result)) { 
            echo $row["COD_PRE"] . "<br>";
        }
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Предупреждение:mysqli_connect():(HY000/1045):Достъпът е отказан за потребител 'username'@'localhost' (използвайки парола:ДА)

  2. Как да изтриете дублирани редове и да актуализирате таблицата

  3. Jar във външни библиотеки, но не може да се импортира в код

  4. MySQL SUM json стойности, групирани по json ключове

  5. Как да избера фиксиран брой редове за всяка група?