Fatal error: Call to a member function prepare() in php oop
Fatal error: Call to a member function prepare() in php oop
现在我学习使用 OOP 概念创建 PHP crud 操作
在这段代码中我遇到了一些问题
Config.php
<?php
class Database{
private $dbHost = "localhost";
private $dbUsername = "root";
private $dbPassword = "";
private $dbName = "xtratuition";
public $db;
public function __construct(){
if(!isset($this->db)){
try{
$conn = new PDO("mysql:host=".$this->dbHost.";dbname=".$this->dbName, $this->dbUsername, $this->dbPassword);
$conn -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->db = $conn;
}
catch(PDOException $e){
die("Failed to connect with MySQL: " . $e->getMessage());
}
return $this->db;
}
}
}
?>
Modules.php
<?php
include_once("config.php");
class CrudController extends Database{
function sqlSelect($TblName , $Condition){
try{
$query = "SELECT * FROM `xtratuition`.$TblName WHERE $Condition";
$result = $this->db->prepare($query);
$result->execute();
$data = array();
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
$data[] = $row;
}
return $data;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
}
class LoginController extends CrudController{
public $emailID;
function __construct($email){
$this->emailID = $email;
}
function userLogin(){
$data = $this->sqlSelect("users" , "email = '".$this->emailID."'");
return $data;
}
}
// This is works well
// $login = new CrudController();
// $data = $login->sqlSelect("`users`" , "email = 'klakshmanan48@gmail.com'");
// print_r($data);
$login = new LoginController("klakshmanan48@gmail.com");
$data = $login->userLogin();
print_r($data);
?>
我想我在这段代码中犯了一个错误。
我收到了这个错误
Fatal error: Call to a member function prepare() on null
这条线
$result = $this->db->prepare($query);
如果您在子 class 中定义构造函数,则必须显式调用父构造函数,它们不会自动调用。
您必须在您的 LoginContoller 中调用父构造 class
class LoginController extends CrudController{
public $emailID;
function __construct($email){
$this->emailID = $email;
parent::__construct(); //explicit call to parent constructor
}
function userLogin(){
$data = $this->sqlSelect("users" , "email = '".$this->emailID."'");
return $data;
}
}
现在我学习使用 OOP 概念创建 PHP crud 操作
在这段代码中我遇到了一些问题
Config.php
<?php
class Database{
private $dbHost = "localhost";
private $dbUsername = "root";
private $dbPassword = "";
private $dbName = "xtratuition";
public $db;
public function __construct(){
if(!isset($this->db)){
try{
$conn = new PDO("mysql:host=".$this->dbHost.";dbname=".$this->dbName, $this->dbUsername, $this->dbPassword);
$conn -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->db = $conn;
}
catch(PDOException $e){
die("Failed to connect with MySQL: " . $e->getMessage());
}
return $this->db;
}
}
}
?>
Modules.php
<?php
include_once("config.php");
class CrudController extends Database{
function sqlSelect($TblName , $Condition){
try{
$query = "SELECT * FROM `xtratuition`.$TblName WHERE $Condition";
$result = $this->db->prepare($query);
$result->execute();
$data = array();
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
$data[] = $row;
}
return $data;
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
}
class LoginController extends CrudController{
public $emailID;
function __construct($email){
$this->emailID = $email;
}
function userLogin(){
$data = $this->sqlSelect("users" , "email = '".$this->emailID."'");
return $data;
}
}
// This is works well
// $login = new CrudController();
// $data = $login->sqlSelect("`users`" , "email = 'klakshmanan48@gmail.com'");
// print_r($data);
$login = new LoginController("klakshmanan48@gmail.com");
$data = $login->userLogin();
print_r($data);
?>
我想我在这段代码中犯了一个错误。 我收到了这个错误
Fatal error: Call to a member function prepare() on null
这条线
$result = $this->db->prepare($query);
如果您在子 class 中定义构造函数,则必须显式调用父构造函数,它们不会自动调用。
您必须在您的 LoginContoller 中调用父构造 class
class LoginController extends CrudController{
public $emailID;
function __construct($email){
$this->emailID = $email;
parent::__construct(); //explicit call to parent constructor
}
function userLogin(){
$data = $this->sqlSelect("users" , "email = '".$this->emailID."'");
return $data;
}
}