php
  • oop
  • 2016-05-05 17 views 0 likes 
    0

    私はスクリプトログインphp oopを書いています。 私は、ファイルをdb.php法によってRunQuery作成:問題は、クエリがNULLを返すということです新しいファイルの空のクエリ結果

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

    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を作成します。

    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

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

    だからあなたはtr別の変数に戻り値を代入するには、Yは、それが割り当てるには何もしています:

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

    $this->last_query_resultからあなたのクエリ結果を取得したり、コードをリファクタリング。または、runQuery()が返信$this->last_query_resultになっていますが、これは少し冗長です。

    関連する問題