PDO,PHP:尝试实例化对象以调用函数-空白页
所以我有两个文件涉及这个问题。其中一个是数据库类,另一个是文件,PDO,PHP:尝试实例化对象以调用函数-空白页,php,database,pdo,Php,Database,Pdo,所以我有两个文件涉及这个问题。其中一个是数据库类,另一个是文件,包含一次数据库文件,然后实例化该类的对象以调用函数--getDB();。 这就是问题所在 数据库类: <?php class Database { private static $datasource='mysql:host=localhost; dbname=db_name'; private static $username='root'; private static $
包含一次数据库文件,然后实例化该类的对象以调用函数--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..
?>
PDOException in
应该是PDOException
此外,它还有助于在开发时打开显示错误并安装xdebug。PDOExceptin
应该是PDOException
此外,它还可以帮助打开显示错误并在开发时安装xdebug。这里有一些错误(使用ini\u集(“显示错误”,1);错误报告(-1);
查看所有错误消息):
PDO的异常类命名为PDOException
,而不是PDOExceptin
从非静态上下文调用静态函数:$database->getDb()
,其中getDb是静态方法。(写入数据库::getDb()
)
编写新数据库
,这将导致致命错误,因为构造函数是私有的(并且命名构造函数的优先级低于magic方法)。在那里使用:
$getdb = Database::Database(); // and declare your Database method as static
这里有一些错误(使用ini\u集(“显示错误”,1);错误报告(-1);
查看所有错误消息):
PDO的异常类命名为PDOException
,而不是PDOExceptin
从非静态上下文调用静态函数:$database->getDb()
,其中getDb是静态方法。(写入数据库::getDb()
)
编写新数据库
,这将导致致命错误,因为构造函数是私有的(并且命名构造函数的优先级低于magic方法)。在那里使用:
$getdb = Database::Database(); // and declare your Database method as static
显然,我做错了什么
对。您编写的代码太多了。编写的代码越多,错误就越多。所以,只要去掉所有无用的代码:
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();
显然,我做错了什么
对。您编写的代码太多了。编写的代码越多,错误就越多。所以,只要去掉所有无用的代码:
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();
var_dump($e)代码>退出之前…var_dump($e)代码>在退出之前…然后,有一天他将需要两个DB实例和。。。呵呵D@Denis两个数据库实例?为什么?有多个实例没有任何意义。。。(如果你不需要操作不同服务器的数据,这是一种非常罕见的情况)@bwoebi:这取决于你使用的应用程序、你正在做的事情、你是否决定通过分片数据库来扩展等@Denis yes,但是你会有一个真正的抽象层来检查做什么,你在静态数组中包含你的连接等等…然后,有一天他会需要两个DB实例和。。。呵呵D@Denis两个数据库实例?为什么?有多个实例没有任何意义。。。(如果你不需要操作不同服务器的数据,这是一种非常罕见的情况)@bwoebi:这取决于你使用的应用程序、你正在做的事情、你是否决定通过分片数据库来扩展等@Denis yes,但是你会有一个真正的抽象层,它会检查你在静态数组中包含连接时要做什么。。。。