2016-02-11 3 views
0

Я знаю, что это, вероятно, было задано раньше, но ответы в других темах, которые я нашел, по-видимому, не помогли мне: /. Я не уверен, что я делаю неправильно, когда я следую ответам, но это подталкивает меня.Звонок на неопределенный метод DB_Class :: prepare()

Ошибка: вызов неопределенного метода DB_Class :: prepare() в строке 15. Я поместил строку комментария, чтобы пометить ее.

Код на голландском языке, я надеюсь, что это не проблема.

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

>

Это, вероятно, что-то очень просто я ищу более, но помощь действительно ценится.

+0

В классе '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Тем не менее вы пытаетесь вызвать методы на нем '$ this-> db -> ....' – Steve

ответ

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.

+0

'$ connection' - это локальная переменная в пределах области конструкторов (и для этого сразу же отбрасывается), а не публичное свойство, поэтому' $ this -> db-> connection' не является опцией. Я согласен с вами повторно PDO, хотя – Steve

+1

Ничего плохого в том, чтобы быть более явным, я думаю ... – Tordek

+0

Спасибо! который решил это. – BadAtPHP