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

时间:2016-01-06 06:49:26

标签: php html mysql oop

我正在努力建立一个用户登录注册系统。所有事情都进展顺利,但当我尝试插入时,我得到一个致命的错误,它说

  

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

我搜索过并找到一些主题,说数据库变量应该是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>";
     }
   }
 }
  ?>

2 个答案:

答案 0 :(得分:4)

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 = ?");

答案 1 :(得分:1)

像这样更改您的配置代码

<?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());
    }
  }
 }

 ?>
相关问题