PHP OOP登录注册系统中的致命错误

PHP OOP登录注册系统中的致命错误,php,html,mysql,oop,Php,Html,Mysql,Oop,我正在尝试建立一个用户登录注册系统。一切都很顺利,但当我尝试插入时,我得到了一个致命的错误,它说 致命错误:在第11行的C:\xampp\htdocs\LoginRegister\LoginRegistration\functions.php中对非对象调用成员函数prepare() 我搜索并找到了一些主题,其中说数据库变量应该是全局的。但是它对我不起作用。有人能告诉我问题出在哪里吗 提前谢谢 这是我的config.php文件 <?php class DatabaseConnectio

我正在尝试建立一个用户登录注册系统。一切都很顺利,但当我尝试插入时,我得到了一个致命的错误,它说

致命错误:在第11行的C:\xampp\htdocs\LoginRegister\LoginRegistration\functions.php中对非对象调用成员函数prepare()

我搜索并找到了一些主题,其中说数据库变量应该是
全局的
。但是它对我不起作用。有人能告诉我问题出在哪里吗

提前谢谢

这是我的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”);