2016-05-05 8 views
0

Я пишу скрипт login php oop. Я создал файл метод DB.php runQuery:Пустой результат запроса в новом файле

function runQuery($query) { 
    $this->last_query_result = $this->conn->query($query); 
    if (!$this->last_query_result) { 
     $this->setError("Nie udalo sie wykonac zapytania: " . $this->conn->error); 
    } 
} 

И в файле login.php я создал новый метод loginUser:

public function loginUser($login, $pass) { 
    $this->result = parent::runQuery("SELECT * FROM users WHERE name = '" . $login . "' AND pass='" . $pass . "'"); 

    var_dump($this->result); 

} 

Проблема заключается в том, что запрос возвращает NULL.

function runQuery($query) { 
    $this->last_query_result = $this->conn->query($query); 
    if (!$this->last_query_result) { 
     $this->setError("Nie udalo sie wykonac zapytania: " . $this->conn->error); 
    } 
} 

-

Весь файл db.php

class DbUser { 

private $conn; 
private $host; 
private $user; 
private $pass; 
private $base; 
private $last_query_result; 

function __construct($host, $user, $pass, $base) { 

    $this->host = $host; 
    $this->user = $user; 
    $this->pass = $pass; 
    $this->base = $base; 
    $this->connect(); 

} 

public function setError($error) { 
    throw new Exception($error); 

} 

protected function connect() { 
    $this->conn = @new mysqli($this->host, $this->user, $this->pass, $this->base); 
    if ($this->conn->connect_errno) { 
     $this->setError("Nie udalo sie polaczyc z baza danych: " . $this->conn->connect_error); 
    } 
} 

function runQuery($query) { 
    $this->last_query_result = $this->conn->query($query); 
    if (!$this->last_query_result) { 
     $this->setError("Nie udalo sie wykonac zapytania: " . $this->conn->error); 
    } 
} 

function fullList() { 
    $return = array(); 
    while (($row = mysqli_fetch_assoc($this->last_query_result)) !== NULL) { 
     $return[] = $row; 
    } 

    return $return; 
} 

}

И файл login.php

//kalsa logowania uzytkownika 
include 'db.php'; 

class login extends DbUser { 

private $login; 
private $pass; 
private $result; 

function __construct() { 
    parent::__construct('localhost', 'michal', 'saba9811', 'test'); 

} 

public function loginUser($login, $pass) { 
    $this->result = parent::runQuery("SELECT * FROM users WHERE name = '" . $login . "' AND pass='" . $pass . "'"); 

     var_dump($this->result); 

    } 

} 

try { 


    $login = $_POST['login']; 
    $pass = $_POST['pass']; 
    $log = new login(); 
    $log->loginUser($login, $pass); 

} catch (Exception $e) { 
    echo $e->getMessage(); 
} 
+0

Вы открыты для инъекций SQL, используйте параметризованные запросы. – chris85

+0

Да, я знаю. Позже я буду обрабатывать SQL-инъекции – major697

ответ

2

Ваш runQuery() функция ничего не вернуть Поэтому, когда вы tr у присвоить возвращаемое значение другой переменной, она не имеет ничего, чтобы назначить:

$this->result = parent::runQuery("SELECT * FROM users WHERE name = '" . $login . "' AND pass='" . $pass . "'"); 

Fetch результаты запроса от $this->last_query_result или рефакторинг кода. Или просто введите runQuery()$this->last_query_result, но это немного лишнее.

Смежные вопросы