I was doing a login/registration system by referring this video tutorial: PHP OOP Login/Register System: Database Querying (Part 8/23) :
And I get an error:
Fatal error: Call to a member function count() on a non-object in C:\\wamp\\www\\login-register-systemv2\\index.php on line 6
<?php
require_once 'core/init.php';
$user = DB::getInstance()->get('user', array('username', '=', 'mantas'));
if(!$user->count()) {
echo 'No user';
} else {
echo 'Ok';
}
And here is my DB.php where I think the problem is:
<?php
class DB {
private static $_instance = null;
private $_pdo,
$_query,
$_error = false,
$_results,
$_count = 0;
private function __construct() {
try {
$this->_pdo = new PDO('mysql:host=' . Config::get('mysql/host') . ';dbname=' . Config::get('mysql/db'), Config::get('mysql/username'), 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($x,$param);
$x++;
}
}
if($this->_query->execute()) {
$this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count = $this->_query->rowCount();
} else {
$this->_error = true;
}
}
return $this;
}
public function action($action, $table, $where = array()) {
var_dump(count($where));
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} {$value} ?";
if(!$this->query($sql, array($value))->error()) {
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 count() {
return $this->_count;
}
public function error() {
return $this->_error;
}
}
I cant find what is wrong, maybe you can.
You must assure that your method execution is returning you always the object. Your action
method may return false in some situations. As an workaround you may change your code to:
require_once 'core/init.php';
$db = DB::getInstance();
$user = $db->get('user', array('username', '=', 'mantas'));
if(!$db->count()) {
echo 'No user';
} else {
echo 'Ok';
}
$db = new DB(); $user = $db->get('user', array('username', '=', 'mantas'));
if(!$user->count()) {
echo 'failed';
} else {
echo 'success';
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.