什么可以导致新的PDO为NULL

时间:2014-11-30 15:23:03

标签: php oop pdo

晚上好人我是OOP的新来者,而且我遇到了一些问题。 在我打电话之后

private function __construct(){
    try {
        $this->_pdo = new PDO(
        'mysql:host=' . config::get('mysql/host'),
        'dbname=' . config::get('mysql/db'),
        config::get('mysql/username'), 
        config::get('mysql/password'));
    } catch (PDOException $e){
            die($e->getMessage());
        }
然后我打电话给

$this->_pdo->prepare($sql)

并且它表示致命错误:在非对象上调用成员函数prepare()

所以我var_dump($ this-> _pdo),结果为NULL。可能导致这个问题的原因是什么?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

试试这个:

<?php    
    private function __construct(){
        try{
            $this->_pdo = new PDO('mysql:host='.config::get('mysql/host').';dbname='.config::get('mysql/db'),config::get('mysql/username'),config::get('mysql/password'));
        }catch(PDOExeption $e){
            die($e->getMessage());
        }
    }
?>

答案 1 :(得分:0)

Juan看到了,但没有解释 - 你在主机名之后和dbname之前缺少一个分号。

通过拆分代码blob并将凭证字符串构建为单独的步骤,您可以获得更好的服务,然后您也可以将var_dumped放在一边,直接看到问题:

$host = config::get('mysql/host');
$db = config::get('mysql/db');
$creds = "mysql:host=$host;dbname=$db"
$this->_pdo = new PDO(
    $creds,
    config::get('mysql/username'),
    config::get('mysql/password')
);