致命错误:在PDO中调用null上的成员函数prepare()

时间:2017-01-24 16:18:01

标签: php pdo

我试图在PHP和PDO中登录但我得到了

  

致命错误:在null中调用成员函数prepare()   第23行的DBOperations.php

一直以来。我一直在互联网上寻找解决方案,但我发现了一些我没有的错误,比如Fatal error Call to a member function prepare() on null。有人可以帮助我吗?

Constants.php:

<?php

define('DB_NAME', 'roedel');
define('DB_USER', 'root');
define('DB_HOST', 'localhost');
define('DB_PASS', '');

?>

DBConnect.php:

<?php

class DBConnect {

    private $con;

    function __construct() {

    }

    function connect() {

        require_once dirname(__FILE__).'/Constants.php';

        try{

            $this->con = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);

        } catch (Exception $ex) {

            echo "No connection. Try again!" . $ex;

        }



    }    
}

?>

DBOperations.php:

<?php

class DBOperations {

    private $con;

    function __construct() {

        require_once dirname(__FILE__).'/DBConnect.php';

        $db = new DBConnect();

        $this->con = $db->connect();

    }

    function createUser($name, $pass, $email){

        $password = md5($pass);

        $rank = "lid";

        $stmt = $this->con->prepare("INSERT INTO 'users' ('id', 'name', 'password', 'email', 'rank') VALUES (NULL, ?, ?, ?, ?)");
        $stmt->bindParam(1, $name);
        $stmt->bindParam(2, $password);
        $stmt->bindParam(3, $email);
        $stmt->bindParam(4, $rank);

        if ($stmt->execute()){

            return true;

        }else{

            return false;

        }


    }

}

?>

1 个答案:

答案 0 :(得分:0)

这意味着变量(即DBOperations :: con here)为NULL。

请仔细查看您的代码:

$this->con = $db->connect();

在这里,您希望DbConnect :: connect()返回连接,但它不返回任何内容(事实上,它&#34;返回&#34; null)。

您错过了DBConnect :: connect()

中的指令return $this->con;

此外,您应该在__construct()(或任何其他函数)中设置您的需求,但是在文件的头部。 ;)

编辑: 而不是:

if ($stmt->execute()){
    return true;
}else{
    return false;
}

你可以写:

return $stmt->execute();

因为它已经返回true或false。 ;)