2016-03-26 34 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Çağrı

<?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(); 
      } 
     } 

    } 
    ?> 

Bu benim DBConfig.php olduğu (Ölümcül hata) olmayan bir nesne üzerinde() hazırlamak

ben hata ne olduğunu bulamıyorum benim

012: kod

kimse

+0

'$ conn' bir db bağlantısı yoktur. Diğer bir deyişle ... Veritabanına bağlantı kurmak başarısız oldu. '$ Conn' değeri o zaman yanlıştır. –

cevap

1

bu özelliklere sahip bir sınıf yazmak ... lütfen bana yardım Sınıf yöntemi içinde

, değişken etki alanı fonksiyonları aynıdır: dış değişkenlerin erişilemez.

$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

üzgün aynı hata mesajı ...... kod çalışma olmalıdır xampp sürümü –

+0

herhangi bir sorun. Veritabanı Sınıfı olarak adlandırdığınız kodu ekleyerek soruyu düzenleyin. – fusion3k

0

daha yaklaşık oku oku:

Eğer $this kullanmak zorunda bir sınıf yöntemi içinde sınıf özelliklerine erişmek için DB bağlantı tutamacını bir değişkende depolamaya çalışıyor $conn. Ama bu sınıf özellik $conn sadece yerel değişken, değil olduğunu. Daha sonra kullanmak için ona erişmek $this->conn. değil bakın $conn yerine yapar $this->conn kullanarak:

Yani bağlantı yöntemi

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(); 
    } 
} 

gibi bir şey artık diğer fonksiyonlar Bir başka deyişle

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(); 
    } 
} 

içinde $this->conn kullanabilirsiniz düşünüldüğünde olmalı $conn nesnelerine, ancak yöntemlerde yerel bir $conn değişkeni. Ancak yerel değişkenler, değil kalıcıdır. Bu nedenle, dbConnection() yöntemini terk ettiğinizde ve login() aynı adı seçerek bu değişkeni yeniden kullanmayı denediğinizde, tanımlayıcı $conn aslında iki farklı yerel değişkene karşılık gelir. Elbette, aldığınız hatayı sağlayan login() yönteminde herhangi bir değere sahip olmadığı anlamına gelir.

senin yöntemlerin içine "bağlantı nesnesi enjekte" böyle başka yaklaşımlar vardır. Ancak yukarıdakiler temiz ve genellikle tercih edilen bir yaklaşımdır.

Bana öyle geliyor
+0

üzgün aynı hata mesajı ...... xampp versiyonu –

+0

OK herhangi bir sorun, bu durumda o veritabanı bağlantısı basitçe (whyever) başarısız olduğunu olabilir. Kodunuz, bu tür bir olay için herhangi bir hata tespiti veya kullanımı içermez;Bu yüzden size öneririm 1. http sunucularınızda hata kayıt dosyasını kontrol edin (problemin ne olduğunu bir php geliştiricisi olarak, bu dosyayı izleyebilmeniz için) ve hata kodlarını ekleyerek kodunuza ekleyin. – arkascha