2017-03-17 9 views
-3

私は様々なフォーラムソフトウェアを見て、アイデアを再現しようとしています。これは、PHPでクラスを使用する際に私をより良くするためですが、これはクラスを初めて使用したときの1つです。私は単純な、一列に並んだコマンドでデータベースから情報を引き出すことができるクラスを作成しています。ほとんどの人がこれはいい考えではないと言うでしょうが、この行はユーザーがデータを挿入するときには使用されません。私はこのようなクエリを実行しようとするたびPHPでのクラスの統合

$db = new DB_MySQLi; 

class DB_MySQLi 
{ 

    function simple_select($table, $fields="*", $conditions="", $options=array()) 
    { 
     $query = "SELECT ".$fields." FROM ".$this->table_prefix.$table; 

     if($conditions != "") 
     { 
      $query .= " WHERE ".$conditions; 
     } 

     if(isset($options['group_by'])) 
     { 
      $query .= " GROUP BY ".$options['group_by']; 
     } 

     if(isset($options['order_by'])) 
     { 
      $query .= " ORDER BY ".$options['order_by']; 
      if(isset($options['order_dir'])) 
      { 
       $query .= " ".my_strtoupper($options['order_dir']); 
      } 
     } 

     if(isset($options['limit_start']) && isset($options['limit'])) 
     { 
      $query .= " LIMIT ".$options['limit_start'].", ".$options['limit']; 
     } 
     else if(isset($options['limit'])) 
     { 
      $query .= " LIMIT ".$options['limit']; 
     } 

     return $this->query($query); 
    } 


} 

そして:ここ

はクラスである

$query = $db->simple_select("users", "*"); 

私はこれらのエラーを取得: お知らせ:未定義のプロパティ:DB_MySQLi :: $ table_prefixに 致命的なエラー:未定義のメソッドを呼び出すDB_MySQLi :: query()

DB_MySQLiはどのように定義されていませんか?

+0

'DB_MySQLi'は未定義ではありません。 'query()'メソッドを持たないクラス 'DB_MySQLi'に対して' query() 'を呼び出そうとしています。あなたは 'PDO'を拡張することを意味しましたか、あるいはデータベース接続を保存するためにある種のインスタンス変数を使用しましたか? – Bytewave

+0

私は$ db = new DB_MySQLiを持っています。コード –

+0

それはちょうどあなたのデータベースラッパーです。データベース接続ではありません。PHPは、使用しているデータベース、現在のデータベース、ログイン方法をPHPが認識していません。それは['PDO'](https://secure.php.net/manual/en/book.pdo.php)と[' MySQLi'](https://secure.php.net/manual/en/book)です。 .mysqli.php)はのためのものです。彼らは、データベース接続とクエリの面倒な作業を処理し、あなたのラッパークラスに使用できる 'query()'メソッドを含んでいます。 – Bytewave

答えて

0

DB_MySQLiは、DB_MySQLi::query()です。

return $this->query($query); - PHPに$this->を使用するように指示すると、クラス(そのクラスの特定のインスタンス)のスコープ内で呼び出すことになります。この場合、DB_MySQLiクラス内にqueryというメソッドがありません。それを見つけることができないので、エラーがスローされます。

+0

しかし、 "$ db = new DB_MySQLi;"を追加するとどうしてそんなことをしないの? –