PHP OOP登录注册系统中的致命错误
我正在尝试建立一个用户登录注册系统。一切都很顺利,但当我尝试插入时,我得到了一个致命的错误,它说 致命错误:在第11行的C:\xampp\htdocs\LoginRegister\LoginRegistration\functions.php中对非对象调用成员函数prepare() 我搜索并找到了一些主题,其中说数据库变量应该是PHP OOP登录注册系统中的致命错误,php,html,mysql,oop,Php,Html,Mysql,Oop,我正在尝试建立一个用户登录注册系统。一切都很顺利,但当我尝试插入时,我得到了一个致命的错误,它说 致命错误:在第11行的C:\xampp\htdocs\LoginRegister\LoginRegistration\functions.php中对非对象调用成员函数prepare() 我搜索并找到了一些主题,其中说数据库变量应该是全局的。但是它对我不起作用。有人能告诉我问题出在哪里吗 提前谢谢 这是我的config.php文件 <?php class DatabaseConnectio
全局的。但是它对我不起作用。有人能告诉我问题出在哪里吗
提前谢谢
这是我的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());
}
}
}
?>
<?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>";
}
}
}
?>
这是我的functions.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());
}
}
}
?>
<?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>";
}
}
}
?>
这会将pdo实例分配给构造函数方法中的变量$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 = ?");
这会将pdo实例分配给构造函数方法中的变量$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
class DatabaseConnection{
public function __construct(){
try{
global $db;
$db = new PDO('mysql:host=localhost;dbname=phplogin', 'root', '');
}
catch (PDOEXCEPTION $e){
die("ERROR Database Connection:".$e->getMessage());
}
}
}
?>
像这样更改配置代码
<?php
class DatabaseConnection{
public function __construct(){
try{
global $db;
$db = new PDO('mysql:host=localhost;dbname=phplogin', 'root', '');
}
catch (PDOEXCEPTION $e){
die("ERROR Database Connection:".$e->getMessage());
}
}
}
?>
试试$database->db->prepare()。你声明你的DatabaseConnection
类为$database
对我不起作用。我正在尝试。也许你需要像这样编写$database->prepare(“从username=?和email=?”的用户中选择id”)代码>尝试使用此$database->prepare(“从用户名=?和电子邮件=?”的用户中选择id”);试试$database->db->prepare()。你声明你的DatabaseConnection
类为$database
对我不起作用。我正在尝试。也许你需要像这样编写$database->prepare(“从username=?和email=?”的用户中选择id”)代码>尝试使用此$database->prepare(“从用户名=?和电子邮件=?”的用户中选择id”);