问题描述
现在我学会了使用 OOP 概念创建 PHP crud 操作
配置文件
<?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);
?>
在这条线上
$result = $this->db->prepare($query);
解决方法
如果您在子类中定义构造函数,则必须显式调用父构造函数,它们不会自动调用。
您必须在 LoginContoller 类中调用 parent 构造
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;
}
}