PDO,PHP:尝试实例化对象以调用函数 - 空白页面

时间:2013-04-27 18:27:21

标签: php database pdo

所以我有两个文件涉及这个问题。其中一个是Database类,另一个是include_once数据库文件的文件,然后继续实例化该类的对象以调用函数 - 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。 如何正确使用我的数据库?我有一个与该类同名的函数的原因是因为我读到你可以用函数实例化对象,但我没有让它工作...

3 个答案:

答案 0 :(得分:2)

此处有一些错误(使用ini_set("display_errors", 1); error_reporting(-1);查看所有错误消息):

PDO的异常类名为PDOException而不是PDOExceptin

从非静态上下文调用静态函数:$database->getDb()其中getDb是静态方法。 (写Database::getDb()

您编写new Database,这将导致致命错误,因为构造函数是私有的(并且命名构造函数的优先级低于magic方法)。在那里使用:

$getdb = Database::Database(); // and declare your Database method as static

答案 1 :(得分:1)

PDOExceptin应为PDOException

此外,它有助于打开display_errors并在开发时安装xdebug。

答案 2 :(得分: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();