0

したがって、この問題には2つのファイルが関係しています。それらの 1 つは Database クラスであり、もう 1 つはinclude_onceDatabase ファイルであり、そのクラスのオブジェクトをインスタンス化して関数を呼び出すファイル -- getDB(); です。それが間違っているところです。

データベース クラス:

<?php
  class Database {           
    private static $datasource='mysql:host=localhost; dbname=db_name';
    private static $username='root';
    private static $password='root';
    private static $db;      

    private function __construct(){}

    public static function getDB(){ 
      if(!isset(self::$db)){ 
        try{
          self::$db=new PDO(self::$datasource,self::$username,self::$password); 
        }
        catch(PDOExceptin $e) {
          $error=$e->getMessage(); //variable $error can be used in the database_error.php file 
          //display database error file.  
          //include('database_error.php');
          exit();            
        }
      }
      return self::$db;      
    }

    function Database(){
      return new Database;
    }

  }

  ?>

そして、私のメインファイルで、私はこれをやっています:

 <?php
    include('partials/header.php'); 
    include_once('functions/pdo.php');

    $database = new Database();
    $getdb = $database->getDB();

    //Anything below won't show because of the failed instantiation of Database object above.
    //code..
 ?>

明らかに、私はここで何か間違ったことをしています。PHP 5.3でMAMPを実行しています。データベースを正しく使用するにはどうすればよいですか? クラスと同じ名前の関数がある理由は、代わりに関数を使用してオブジェクトをインスタンス化できると読んだためですが、それも機能しませんでした...

4

3 に答える 3

2

ここにいくつかのエラーがあります (ini_set("display_errors", 1); error_reporting(-1);すべてのエラー メッセージを表示するために使用します)。

PDO の例外クラスは名前付きPDOExceptionであり、PDOExceptin.

非静的コンテキストから静的関数を呼び出します$database->getDb()。getDb は静的メソッドです。(書くDatabase::getDb()

コンストラクターがプライベートであるため、致命的なエラーが発生するように記述new Databaseします (また、名前付きコンストラクターはマジック メソッドよりも優先順位が低くなります)。そこで使用:

$getdb = Database::Database(); // and declare your Database method as static
于 2013-04-27T18:36:54.907 に答える
1

PDOExceptinする必要がありますPDOException

また、開発時に display_errors をオンにして xdebug をインストールすると役立ちます。

于 2013-04-27T18:33:40.193 に答える
1

明らかに、私はここで何か間違ったことをしています。

はい。あなたはあまりにも多くのコードを書いています。
コードを書けば書くほど、エラーが増えます。したがって、役に立たないコードをすべて削除してください。

class Database {           
    private static $datasource='mysql:host=localhost; dbname=db_name';
    private static $username='root';
    private static $password='root';
    private static $db;      

    public static function getDB(){ 
      if(!isset(self::$db)){ 
          self::$db=new PDO(self::$datasource,self::$username,self::$password); 
      }
      return self::$db;      
    }
}

そしてそれをこのように呼びます

$db = Database::getDB();
于 2013-04-27T18:40:18.457 に答える