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

致命的なエラー:メンバー関数query()PHPCLASSの呼び出し

    あなたの方法:

    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. 修正方法「from句のバルク行セットに相関名を指定する必要があります。」 SQLServerで

    2. PostgreSQLがpg_catalogテーブルからパーミッションを取り消す

    3. SQLServerを使用するためのAzure仮想マシン

    4. MySQLのDjangoの列にはデータが長すぎます