我在浏览数据库时遇到问题 - 我收到此错误:
致命错误:在第5行的C:\ xampp \ htdocs \ ooplr \ index.php中的非对象上调用成员函数error() < / p>
<?
php
require_once "core/init.php";
$users = DB::getInstance()->get('users',array('username','=','alex'));
if($users->error()){ ***<--- ERROR MESSAGE ON THIS LINE!!!***
echo 'No user';
} else {
echo 'OK!';
}
错误消息在第5行。如何将$用户转变为对象?
get方法工作正常 - 测试它!
那么问题似乎是什么问题?
我刚做了一个var_dump($ users),它正在打印bool(false)......为什么会这样?
答案 0 :(得分:0)
添加了一堆方法,一旦找到罪魁祸首
就要删除<?php
class DB{
const OP_EQUALS = 0;
const OP_M_THAN = 1;
const OP_L_THAN = 2;
const OP_ME_THAN = 3;
const OP_LE_THAN = 4;
/**
* Singleton pattern
* @var PDO object
*/
private static $instance = null;
/**
* @var PDO object
*/
private $pdo;
/**
* prepared statements
* @var PDOStatement object
*/
private $query;
/**
* This class is incomplete, this is important but neglected, time to change that...
* @var PDOStatement object
*/
private $results;
/**
* Holds the result of calling stmt->rowCount() for the current query
* @var integer the behaviour of this is not guaranteed
*/
private $count = 0;
private function __construct(){
try {
$host = Config::get('mysql/host');
$data = Config::get('mysql/db');
$user = Config::get('mysql/username');
$pass = Config::get('mysql/password');
$dsn = 'mysql:host='.$host.';dbname='.$data;
$this->pdo = new PDO($dsn,$user,$pass);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
// not for production
die($e->getMessage());
}
}
public static function getInstance(){
if (!isset(self::$instance)) self::$instance = new DB;
return self::$instance;
}
/**
* This is a blanket fetch all, seems ok
* @param string $q
* @param array $params
* @return DB
*/
public function query($q, array $params=array()) {
$this->count = null;
$this->query = $this->pdo->prepare($q);
$this->query->execute($params);
$this->results = $this->query->fetchAll(PDO::FETCH_CLASS,'stdClass');
$this->count = $this->query->rowCount();
return $this;
}
/**
* This is a cute function, but I do not recomend it's use
* @param string $action
* @param string $table
* @param array $where
* @return DB
*/
private function action($action, $table, array $where=array()){
static $operators = array('=','>','<','>=','<=');
if (count($where)===3) {
list($op1,$operator,$op2) = $where;
if (in_array($operator, $operators)) {
$q = $action.' FROM '.$table.' WHERE '.$op1.' '.$operator.' ?';
return $this->query($q,$operators);
}
}
return null;
}
/**
* This abstraction seems convenient but it will become a nightmare later on
* @param string $table
* @param array $where
* @return DB
*/
public function get($table, array $where=array(1,0,1)){
return $this->action('SELECT *',$table,$where);
}
/**
* This abstraction seems convenient but it will become a nightmare later on
* @param string $table
* @param array $where
* @return DB
*/
public function delete($table, array $where=array(1,0,1)){
return $this->action('DELETE',$table,$where);
}
public function getResultSet(){
return $this->results;
}
/*
* start debugging functions
*/
/**
* Returns a prepared statement
* @param string $q
* @return PDOStatement
*/
public function debug_statement($q) {
return $this->pdo->prepare($q);
}
/**
* Directly executes a statement
* @param string $q
* @param int $fetch_options
* @return PDOStatement
*/
public function debug_query($q, $fetch_options=PDO::FETCH_ASSOC) {
return $this->pdo->query($q,$fetch_options);
}
/**
* Get metadata from table
* @param string $table
* @return string
*/
public function describe_table($table) {
$stmt = $this->debug_query('DESC '.$table);
return '<pre>'.print_r($stmt->fetchAll(),1).'</pre>';
}
/**
* Get contents from table
* @param string $table
* @return string
*/
public function dump_table($table) {
$stmt = $this->debug_query('SELECT * FROM '.$table);
return '<pre>'.print_r($stmt->fetchAll(),1).'</pre>';
}
}
我希望这不会空洞,否则我会非常难过
// debugging information
// let's use a blanket statement to get all rows in the database
$db = DB::getInstance();
echo 'Currently debugging!'.PHP_EOL;
echo 'Get a clear look at our `Users` table: '.$db->describe_table('users');
echo 'Dump all rows: '.$db->dump_table('users');
使用此DB类,然后运行脚本。给我们一些反馈意见