我正在尝试创建一个用户登录注册系统。一切进展顺利,但是当我尝试插入时出现 fatal error ,它说
Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\LoginRegister\LoginRegistration\functions.php on line 11
我搜索并找到了一些主题,其中说数据库变量应该是 global
。但它对我不起作用。谁能告诉我问题出在哪里?
提前致谢。
这是我的config.php 文件。
<?php
class DatabaseConnection{
public function __construct(){
try{
$db = new PDO('mysql:host=localhost;dbname=phplogin', 'root', '');
}
catch (PDOEXCEPTION $e){
die("ERROR Database Connection:".$e->getMessage());
}
}
}
?>
这是我的 functions.php 文件。
<?php
require "config.php";
class LoginRegistration{
function __construct(){
$database = new DatabaseConnection();
}
public function resigterUser($username, $password, $name, $email, $website){
global $db;
$query = $db->prepare("SELECT id FROM users WHERE username = ? AND email = ?");
$query->execute(array($username, $email));
$num = $query->rowCount();
if($num == 0){
$query = $db->prepare("INSERT INTO users (username, password, name, email, website) VALUES (?, ?, ?, ?, ?)");
$query->execute(array($username, $password, $name, $email, $website));
return true;
}
else{
return print "<span style='color:#e53d37'>Error... username/email already exist!</span>";
}
}
}
?>
最佳答案
class DatabaseConnection{
public function __construct(){
try{
$db = new PDO('mysql:host=localhost;dbname=phplogin', 'root', '');
这会将 pdo 实例分配给 local scope 中的变量 $db的构造方法。一旦离开此方法,$db 将变得无法访问。
你可以尝试类似的东西
<?php
class DatabaseConnectionProvider {
protected $pdo;
public function __construct() {
$this->pdo = new PDO('mysql:host=localhost;dbname=phplogin', 'root', '');
}
public function getConnection() {
return $this->pdo;
}
}
class LoginRegistration{
protected $dbp;
function __construct(DatabaseConnectionProvider $dbp) {
$this->dbp = $dbp;
}
public function registerUser($username, $password, $name, $email, $website) {
$pdo = $this->dbp->getConnection();
$query = $pdo->prepare("SELECT id FROM users WHERE username = ? AND email = ?");
关于php - PHP OOP 登录注册系统中的 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34627236/