php - PHP OOP 登录注册系统中的 fatal error

标签 php html mysql oop

我正在尝试创建一个用户登录注册系统。一切进展顺利,但是当我尝试插入时出现 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/

相关文章:

php - NSData(if 语句)

PHP SQL 单个条目中的多行

javascript - 用 span 包裹每个字符,但保持 HTML 格式

mysql - 插入从锁定行中获取的值的问题

PHP (Joomla 2.5) 执行未返回 Apache?

html - 如何获得:href ="@{}" instead of href ="" in links spring boot/angular app

javascript - onmouseover 覆盖了 :hover in CSS

java - 为什么当我的结果集类型是 forward only 时我可以使用 first() 方法?

java - 仍然对 Java 时间戳等与 MySQL 混淆

php - 意外的 PHP 解析错误