Fatal error: Call to a member function fetchAll() on a non-object 异常询问,怎么解决

madman_wang 2017-04-06 05:37:15

<?php
class PdoMySQL{
public static $config=array();//设置连接参数,配置信息
public static $link=null;//保存连接标识符
public static $pconnect=false;//是否开启长连接
public static $dbVersion=null;//保存数据库版本
public static $connected=false;//是否连接成功
public static $PDOStatement=null;//保存PDOStatement对象
public static $queryStr=null;//保存最后执行的操作
public function _construct($dbConfig=''){
if (!class_exists("PDO")){
self::throw_exception('不支持PDO,请先开启');
}
if (!is_array($dbConfig)){
$dbConfig=array(
'hostname'=>DB_HOST,
'username'=>DB_USER,
'password'=>DB_PWD,
'database'=>DB_NAME,
'hostport'=>DB_PORT,
'dbms'=>DB_TYPE,
'dsn'=>DB_TYPE.":host=".DB_HOST.":dbname=".DB_NAME
);
}
if (empty($dbConfig['hostname']))self::throw_exception('没有定义数据库配置,请先定义');
self::$config=$dbConfig;
if (empty(self::$config['params']))self::$config['params']=array();
if (!isset(self::$link)){
$configs=self::$config;
if (self::$pconnect){
//开启长连接,添加到配置数组中
$configs['params'][constant("PDO::ATTR_PERSISTENT")]=true;
}
try {
self::$link=new PDO($configs['dsn'], $configs['username'], $configs['password'], $configs['params']);
} catch (PDOException $e) {
self::throw_exception($e->getMessage());
}
if (!self::$link){
self::throw_exception('PDO连接错误');
return false;
}
self::$link->exec('SET NAMES'.DB_CHARSET);
self::$dbVersion=self::$link->getAttribute(constant("PDO::ATTR_SERVER_VERSION"));
self::$connected=true;
unset($configs);
}
}
/**
* 得到所有记录
* @param string $sql
* @return unknown
*/
public static function getAll($sql=null){
if($sql!=null){
self::query($sql);
}
$result=self::$PDOStatement->fetchAll(constant("PDO::FETCH_ASSOC"));
return $result;
}
/**
* 释放结果集
*/
public static function free(){
self::$PDOStatement=null;
}
public static function query($sql=''){
$link=self::$link;
if (!$link) return false;
//判断之前是否有结果集,如果有的话,释放结果集
if (!empty(self::$PDOStatement))self::free();
self::$queryStr=$sql;
self::$PDOStatement=$link->prepare(self::$queryStr);
$res=self::$PDOStatement->execute();
self::haveErrorThrowException();
return $res;
}
public static function haveErrorThrowException(){
$obj=empty(self::$PDOStatement)?self::$link: self::$PDOStatement;
$arrError=$obj->errorInfo();
print_r($arrError);
}
/**
* 自定义错误处理
* @param unknown $errMsg
*/
public static function throw_exception($errMsg){
echo '<div style="width:80%;background-color:#ABCDEF;color:black;font-size:20px;padding:20px 0px;">
'.$errMsg.'
</div>';
}
}
require_once 'config.php';
$PdoMySQL=new PdoMySQL;
//var_dump($PdoMySQL);
$sql='select * from user';
print_r($PdoMySQL->getAll($sql));

...全文
598 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
傲雪星枫 2017-04-06
  • 打赏
  • 举报
回复

 public static function query($sql=''){
        $link=self::$link;
        if (!$link) return false;
        //判断之前是否有结果集,如果有的话,释放结果集
        if (!empty(self::$PDOStatement))self::free();
        try{
            self::$queryStr=$sql;
            self::$PDOStatement=$link->prepare(self::$queryStr);
            $res=self::$PDOStatement->execute();
            self::haveErrorThrowException();
            return $res;
        }catch (PDOException $e){
            print $e->getMessage();
        }
    }
看看有什么错误。
xuzuning 2017-04-06
  • 打赏
  • 举报
回复
你封装了数据库操作,但为何不封装错误处理呢?

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧