2017-01-18 4 views
1

私はOOP PHPを使用して新しく、クラスメソッドを使用してデータベースでクエリを行う方法を理解するのに苦労しています。ここに私のコードと私は解決する方法を知らないエラーがあります。OOP phpでのクエリーエラーの取得

「私は、接続変数を宣言したが、私はそれが

Notice: Undefined variable: connection

Fatal error: Call to a member function query() on a non-object in

をdb.php

class DbConnector { 

    private $serverName; 
    private $userName; 
    private $password; 
    private $dbName; 
    private $connection; 

    public function __construct(){ 
     $this->serverName = "localhost"; 
     $this->userName = "root"; 
     $this->password = "attl"; 
     $this->dbName = "oop"; 

     $this->connection = new mysqli($this->serverName, $this->userName, $this->password, $this->dbName); 

     if ($this->connection->connect_error) { 
      $this->connection = die("Connection failed: " . $this->connection->connect_error); 
     } 
    } 

    public function getConnection(){ 
     return $this->connection; 
    } 
} 

のindex.php

include('../queries/db.php'); 

class Users{ 

    private $connection; 

    public function __construct(){ 
     $con = new DbConnector(); 
     $connection = $con->getConnection(); 
    } 
    public function getUsers(){ 
     $sql = $connection->query("SELECT * FROM login"); 

     while($getUsers = $sql->fetch_array()){ 
      echo $getUsers['username']; 
     } 
    } 

} 

$user = new Users(); 
return $user->getUsers(); 
+0

@hanky panky –

+0

オリジナルの質問は「エラーが発生しました」とのリンクがありますNotice:未定義の変数:C:\ xampp \ htdocs \ oop \ views \ index.php on line 13'だからimho重複フラグは、それにスポットがすぐに解決策をあなたに役立つことができます –

+0

あなたはどのようなエラーがありますか? –

答えて

3

を未定義だ、なぜあなたの問題はあなたですかわかりませんクラスプロパティではなくローカルスコープの変数にアクセスしようとしています

public function getUsers(){ 
    $sql = $connection->query("SELECT * FROM login"); // HERE 

    while($getUsers = $sql->fetch_array()){ 
     echo $getUsers['username']; 
    } 
} 

この範囲内の変数$connectionを見つけることができない場合は、$thisを使用してオブジェクトプロパティにアクセスする必要があります。

class Users { 

    private $connection; 

    public function __construct() 
    { 
     $con = new DbConnector(); 
     // Assign this to object propety declared above 
     $this->connection = $con->getConnection(); 
    } 

    public function getUsers() 
    { 
     // now access the object property set in constructor. 
     $sql = $this->connection->query("SELECT * FROM login"); 

     while($getUsers = $sql->fetch_array()){ 
      echo $getUsers['username']; 
     } 
    } 
} 
+0

*乾杯*アンドリュー。先にOPに語ったように。あなたの答えがここに掲載されていなかったので、私は彼女に質問したところで質問がまだ開いているので、テストに時間を割いてどこが間違っているのか把握し、すべて入力していました。あなたの答えはそれをとてもうまく説明します。 –

2

あなたがプライベートとして次のことを宣言しているので:
private $connection;

とあなたの構築物中にそれを含む:

public function __construct(){ 
     $con = new DbConnector(); 
     $connection = $con->getConnection(); 

あなたは、そのプロパティの$thisを使用する必要があります

$this->connection = $con->getConnection(); 

N変更:

$sql = $connection->query 

$sql = $this->connection->query 

に接続プロパティを使用するために。

今、私はOOPの専門家ではないことを認めなければなりません。これを解決する別の方法があるかもしれませんが、これは私がそれを取ったものです。

+0

ありがとうございます - 私はコードを再プログラムして実行します。あなたが私の他の質問をもう一度見たら、ここからは違う。しかし、もう1つの質問は、コントローラがどのように機能するのかわからないコントローラに関するものです。 MVCをゆっくりと学びたいだけです。 –

+0

TBH、もう一つの答えを見る前にこれを書いていました。私はここで議長のために蹴っていない*笑*ちょうど言っている。 @GeninaAnneGabutenあなたがあなたの完全な解決策を見つけたことをうれしく思います。あなたは歓迎です*歓声* –