user3537391
user3537391

Reputation:

Cannot run query?

I am working on a new login system in oop. I have the following codes:

My index.php looks like this: The error occurs with the variable $user in line 6.

Why cant I recieve the result of the codes after the 6'th line?

<?
require_once ('core/init.php');

echo 'WORKING!';

$user = DB::getInstance()->get('users', array('username', '=', 'ozan'));

if ($user->_error()){
    echo 'NO USER!';
}
else {
    echo 'OK!';
}

here is my DB.php (class file)

<?

class DB {

    private static $_instance = null;
    private 
        $_pdo, 
        $_query, 
        $_error = false,
        $_result, 
        $_count = 0;

    private function __construct() {
        try {
            $this->_pdo = new PDO('mysql:host='. Config::get('mysql/host') . ';dbname' . Config::get('mysql/db'), Config::get('mysql/password') );
        } catch(PDOException $e) {
            die($e->getMessage());
        }
    }

    public static function getInstance() {

        if(!isset(self::$_instance)) {
            self::$_instance = new DB();
        }

        return self::$_instance;
    }

    public function query($sql, $params = array()) {
        $this->_error = false;
        if($this->_query = $this->_pdo->prepare($sql)) {
            x = 1;
            if(count($params)) {
                foreach($params as $param) {
                    $this->_query->bindValue(pos, $param);
                    x++;
                }

                if($this->_query->execute()) {
                    $this->_result = $this->_query->fetchAll(PDO:FETCH_OBJ);
                    $this->_count = $this->_query->rowCount();
                }
                else {
                    $this->_error = true;
                }
            }
        }

        return $this;
    }

    public function action($action, $table, $where = array() ) {
        if ( count($where) === 3 ) {
            $operators = array ('=','>','<','<=','<=');

            $field =    $where[0];
            $operator = $where[1];
            $value =    $where[2];

            if ( in_array($operator, $operators)) {
                $sql = "{$action} FROM {$table} WHERE {$field} {$operator} ?"

                if ( !$this->query($sql, array($value))) {
                    return $this;
                }
            }
        }
        return false;
    }

    public function get($table, $where) {
        return $this->action('SELECT *', $table, $where);
    }

    public function delete($table, $where) {
        return $this->action('DELETE', $table, $where);
    }

    public function error() {
        return $this->_error;
    }

}

init.php file if needed:

<?
session_start();

$GLOBALS['config'] = array (
    'mysql' => array(
        'host' => '***',
        'user' => '***',
        'pass' => '***',
        'db'   => '***',
    ),
    'remember' => array(
        'cookie_name'   => 'hash',
        'cookie_expiry' => 604800
    ),
    'session' => array(
        'session_name' => 'user'
    )
);

spl_autoload_register(function ($class) {
    require_once 'classes/'. $class . '.php';
});

require_once ('functions/sanitize.php');

Upvotes: 0

Views: 100

Answers (1)

Kai
Kai

Reputation: 3823

In your DB class, $_error is a private variable. It looks like the function name is error (no underscore.) So you should be calling $user->error(); instead.

Upvotes: 1

Related Questions