major697
major697

Reputation: 1862

Empty query result in new file

I write script login php oop. I created file Db.php method 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);
    }
}

And in file login.php i created new method loginUser:

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

    var_dump($this->result);

}

The problem is that the query returns NULL.

The entire file 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;
}

}

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

Upvotes: 0

Views: 57

Answers (1)

WillardSolutions
WillardSolutions

Reputation: 2314

Your runQuery()function doesn't return anything -

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

So when you try to assign the return value to another variable, it has nothing to assign:

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

Fetch your query results from $this->last_query_result or refactor your code. Or just have runQuery() return $this->last_query_result, but that's a bit redundant.

Upvotes: 2

Related Questions