2016-03-26 15 views
-1

Fatal error: Call to a member function prepare() on a non-object in G:\xampp\htdocs\live\Billing Suryas\model\DBConfig.php on line 28コール)

<?php 
    class Database 
    { 
     private $host = "localhost"; 
     private $db_name = "new_suryas1"; 
     private $username = "root"; 
     private $password = ""; 
     public $conn; 
     public function dbConnection() 
     { 
      $this->conn = NULL;  
      try 
      { 
       $conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password); 
       $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      } 
      catch(PDOException $exception) 
      { 
       echo "Connection error: " . $exception->getMessage(); 
      } 

      return $conn; 
     } 
     public function login($usname,$uspswd) 
     { 
      try 
      { 
       $stmt =$conn->prepare("select * from users where user_name=:uname and password=:paswrd and permission='0' and delet='0'"); 
       $stmt->execute(array(':uname'=>$usname, ':paswrd'=>$uspswd)); 
       $userRow=$stmt->fetch(PDO::FETCH_ASSOC); 
       if($stmt->rowCount() == 1) 
       { 
        if(password_verify($uspswd, $userRow['password'])) 
        { 
         $_SESSION['user_session'] = $userRow['user_id']; 
         return true; 
        } 
        else 
        { 
         return false; 
        } 
       } 
      } 
      catch(PDOException $exception) 
      { 
       echo $exception->getMessage(); 
      } 
     } 

    } 
    ?> 

これは私のDBConfig.php

である私は、私の中にエラーが何であるかを見つけることができませんコード

誰も私を助けてください...

+0

「$ conn」はdb接続ではないようです。言い換えれば...データベースへの接続に失敗しました。 '$ conn'の値はfalseです。 –

答えて

1

あなたはこれらのプロパティを持つクラスを記述します。

class Database 
{ 
    private $host = "localhost"; 
    private $db_name = "new_suryas1"; 
    private $username = "root"; 
    private $password = ""; 
    public $conn; 

クラスメソッドの内部では、変数スコープは関数と同じです。外部変数にはアクセスできません。あなたが$thisを使用する必要がクラスメソッドの内部クラスのプロパティにアクセスするには

$this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password); 
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

(...) 

$stmt = $this->conn->prepare("select * from users where user_name=:uname and password=:paswrd and permission='0' and delet='0'"); 

+0

申し訳ありません同じエラーメッセージ...... xamppバージョン –

+0

の問題コードは動作する必要があります。データベースクラスを呼び出すコードを追加して質問を編集します。 – fusion3k

0

あなたがいますDB接続ハンドルを変数01に格納しようとしています。しかし、これはちょうどローカル変数ではなく、クラスプロパティ$connです。後で使用するには、それにアクセスする必要があります$this->connです。 ないを参照してください$conn代わりにし$this->connの使用:

だからあなたの接続方法は、

public function dbConnection() 
{ 
    try { 
     $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password); 
     $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    } catch(PDOException $exception) { 
     echo "Connection error: " . $exception->getMessage(); 
    } 
} 

のようなものは、あなたが今、他の機能つまり

public function login($usname, $uspswd) 
{ 
    try { 
     $stmt = $this->conn->prepare("select * from users where user_name=:uname and password=:paswrd and permission='0' and delet='0'"); 
     $stmt->execute(array(':uname'=>$usname, ':paswrd'=>$uspswd)); 
     $userRow = $stmt->fetch(PDO::FETCH_ASSOC); 
     if($stmt->rowCount() == 1) { 
      if(password_verify($uspswd, $userRow['password'])) { 
       $_SESSION['user_session'] = $userRow['user_id']; 
       return true; 
      } else { 
       return false; 
      } 
     } 
    } catch(PDOException $exception) { 
     echo $exception->getMessage(); 
    } 
} 

$this->connを使用できることを考えるべきですオブジェクトのプロパティ$connに、ローカルの変数$connに変更します。しかし、ローカル変数はではなく、となります。したがって、メソッドdbConnection()を終了してlogin()で同じ名前を選択してその変数を再利用しようとすると、識別子$connは実際には2つの異なるローカル変数を参照します。これは、あなたが受け取ったエラーにつながるlogin()メソッドの中でいかなる価値も保持していないことを意味します。

「接続オブジェクトを注入する」のように、メソッドには他の方法があります。しかし、上記は清潔で通常は好ましいアプローチです。

+0

申し訳ありません同じエラーメッセージ...... xamppバージョン –

+0

で問題が発生しました。その場合は、データベース接続が失敗している可能性があります。あなたのコードには、そのような事象の検出や処理が含まれていないため、検出されません。1.あなたのHTTPサーバーのエラーログファイルに問題が何であるかをチェックしてください(PHP開発者は常にそのファイルを監視する必要があります)。そしてエラー検出と処理をコードに追加します。 – arkascha