2017-02-09 34 views
1

php oopをmysqlと学習していますが、このコードを修正する際に問題があります。 私はそれを2回チェックし、確認するためにこのプラットフォームもチェックしました。致命的なエラー:キャッチされていないエラー(PHP mysql)

<?php 

require 'databasesclass.php'; 

$database = new Database(); 

$database->query('SELECT * FROM users'); 
$rows = $database->resultset(); 

print_r($rows); 

と私のデータ・ベース・クラス

<?php 


class Database{ 
    private $host = 'localhost:8889'; 
    private $user = 'root'; 
    private $pass = 'root'; 
    private $dbname = 'register'; 

    private $dbh; 
    private $error; 
    private $stmt; 

    public function __construct(){ 
     // Set the DSN 
     $dsn = 'mysql:host='. $this->host . ';dbname=' . $this->dbname . $this->user . $this->pass; 
     // set options 
     $options = array(

       PDO::ATTR_PERSISTENT => true, 
       PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION); 

     try { 
      $this->dbh = new PDO($dsn, $this->user, $this->pass, $options); 
     } catch (PDOException $e) { 
      $this->error = $e->getMessage(); 
     } 
    } 
      public function query($query){ 

       $this->stmt = $this->dbh->prepare($query); 

      } 


      public function bind($pram, $value, $type = null){ 

       if (is_null($type)){ 
        switch(true) { 
         case is_int($value): 
          $type = PDO::PRAM_INT; 
          break; 
         case is_bool($value): 
          $type = PDO::PRAM_BOOL; 
          break; 
         case is_null($value): 
          $type = PDO::PRAM_NULL; 
          break; 
          default: 
          $type = PDO::PRAM_STR; 
        } 

       } 

       $this->stmt->bindValue($parm, $value, $type); 
      } 

      public function execute(){ 
       return $this->stmt->execute(); 
      } 

      public function resultset(){ 
       $this->execute(); 
       return $this->stmt->fetchALL(PDO::FETCH_ASSOC); 
      } 

} 

Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\MAMP\htdocs\Practice\databasesclass.php:31 Stack trace: #0 C:\MAMP\htdocs\Practice\index.php(7): Database->query('SELECT * FROM u...') #1 {main} thrown in C:\MAMP\htdocs\Practice\databasesclass.php on line 31

され、ライン31がある:あなたが$database->query('SELECT * FROM users')実行している瞬間に

$this->stmt = $this->dbh->prepare($query); 
+0

あなたの$ dsnが正しく形成されていないと思います(あなたのdbの名前は "registerrootroot"ですか?)。 – zenko

+0

dsnは完璧に動作していますが、クエリ関数の後に入力するとエラーに遭遇します。 – Qazalbash

+0

$ this-> dbhにはPDOオブジェクトが含まれていますか?ここからは、nullのように見えます。 – zenko

答えて

0

必要はありません。それらをそこから削除します。

ので$ DNS変数は

$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname; 

$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname . $this->user . $this->pass; 

から

になり確認し、そこに何らかのエラーが表示された場合は、私を聞かせてください。

+0

働いてありがとう、 – Qazalbash

+0

ようこそ@HassamAliQazalbash – Sharif

0

$this->dbhはnullです。 prepareを実行する前に、それがPDOのインスタンスであるかどうかを確認することができます。 ます$ this->ユーザーを渡し、ます$ this->あなた$ DNS変数にを渡す

関連する問題