【问题标题】:cant access the connection details from my database class无法从我的数据库类访问连接详细信息
【发布时间】:2015-10-10 14:28:18
【问题描述】:

您好,我正在使用 oophp 创建注册和登录系统,我正在尝试检查数据库中是否已经存在电子邮件或用户名,但是当我尝试调用数据库类时,我不断收到这些错误,任何帮助都会受到赞赏。

注意:未定义变量:数据库位于 C:\Users\josh\xampp-win32-1.8.3-5-VC11\xampp\htdocs\oop_system\include\class.user.php 第 14 行

注意:试图获取非对象的属性 C:\Users\josh\xampp-win32-1.8.3-5-VC11\xampp\htdocs\oop_system\include\class.user.php 第 14 行

致命错误:在非对象上调用成员函数 query() C:\Users\josh\xampp-win32-1.8.3-5-VC11\xampp\htdocs\oop_system\include\class.user.php 第 14 行

用户类

<?php 
    include "db_config.php";

    class User{

        /*** for registration process ***/
        public function reg_user($name,$username,$password,$email){


            $password = md5($password);
            $sql="SELECT * FROM users WHERE uname='$username' OR uemail='$email'";

            //checking if the username or email is available in db
            $check =  $Database->getConnection->query($sql) ;
            $count_row = $check->num_rows;

            //if the username is not in db then insert to the table
            if ($count_row == 0){
                $sql1="INSERT INTO users SET uname='$username', upass='$password', fullname='$name', uemail='$email'";
                $result = mysqli_query($this->db,$sql1) or die(mysqli_connect_errno()."Data cannot inserted");
                return $result;
            }
            else { return false;}
        }
    }
?>

db_config 类

<?php
/*
* Mysql database class - only one connection alowed
*/
class Database {
    private $_connection;
    private static $_instance; //The single instance
    private $_host = "localhost";
    private $_username = "root";
    private $_password = "";
    private $_database = "oop";
    /*
    Get an instance of the Database
    @return Instance
    */
    public static function getInstance() {
        if(!self::$_instance) { // If no instance then make one
            self::$_instance = new self();
        }
        return self::$_instance;
    }
    // Constructor
    private function __construct() {
        $this->_connection = new mysqli($this->_host, $this->_username, 
        $this->_password, $this->_database);

        // Error handling
        if(mysqli_connect_error()) {
            trigger_error("Failed to conencto to MySQL: " . mysql_connect_error(),
                 E_USER_ERROR);
        }
    }
    // Magic method clone is empty to prevent duplication of connection
    private function __clone() { }
    // Get mysqli connection
    public function getConnection() {
        return $this->_connection;
    }
}
?>

【问题讨论】:

  • $check = Database::getInstance()-&gt;getConnection()-&gt;query($sql) ;
  • @Federico 将 getConnection 替换为 getConnection()

标签: php mysql


【解决方案1】:
  1. Database 是一个类,而不是变量,所以你用Database 来调用它,而不是$Database
  2. getConnection 是一个函数/方法而不是变量/字段,因此您必须在其名称后使用括号:getConnection()
  3. getConnection 是一个非静态函数,因此您不能在 Database 上调用它,您必须获取该类的实例(使用 Database::getInstance())。

总而言之,替换这一行:

$check = $Database->getConnection->query($sql);

用这个:

$check = Database::getInstance()->getConnection()->query($sql);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多