我试图在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;
}
}
}
?>
答案 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。 ;)