调用未定义的方法DB_Class :: prepare()

时间:2016-02-11 11:12:28

标签: php oop mysqli

我知道这可能之前已被问过,但我发现的其他主题的答案似乎对我没有帮助:/。我不确定当我遵循答案时我做错了什么,但它让我烦恼。

错误:在第15行调用未定义的方法DB_Class :: prepare()。我已添加注释行来标记它。

代码是荷兰语,我希望这不是问题。

Reg_Functies.php(或至少相关部分):

<?php
require_once("Reg_Config.php");
class Gebruiker
{
    private $db;

    public function Gebruiker()
    {
        $this->db = new DB_Class();
    }

    public function check_login($email, $wachtwoord) 
    {
        $wachtwoord = md5($wachtwoord);
        $resultaat = $this->db->prepare("SELECT Log_ID, Log_Bevoegdheid from login WHERE Log_Email = ? and Log_Wachtwoord = ?"); //this line gives the error

        $resultaat->bind_param("ss", $email, $wachtwoord);
        $resultaat->execute();

Reg_Config.php:

<?php
define('DB_Server', 'localhost');
define('DB_Gebruikersnaam', 'root');
define('DB_Wachtwoord', 'password');
define('DB_Database', 'database');
class DB_Class 
{
    function __construct() 
    {
        $connection = mysqli_connect(DB_Server, DB_Gebruikersnaam, DB_Wachtwoord, DB_Database);
        if (mysqli_connect_errno())
        {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }
    }
}

&GT;

这可能是我正在寻找的非常简单的事情,但非常感谢帮助。

1 个答案:

答案 0 :(得分:2)

您的代码正在尝试致电DB_Class::prepare(),因为$this->db已被分配new DB_Class()

首先,构造函数应保留mysqli连接对象的副本,因此添加一个字段

private $connection;

DB_Class类,并更新构造函数以便它调用

$this->connection = $connection;

最后。

然后,您需要定义prepare方法,在mysqli_prepare($this->connection)中调用DB_Class(),或致电$this->db->connection->prepare()。如果您选择最后一个选项,则需要将其设为public字段,而不是!

另一个更好的选择是避免创建这个多余的DB_Class并改为使用PDO