为了账号安全,请及时绑定邮箱和手机立即绑定
报错了
object(PdoMySql)#1 (0) { } 
Fatal error: Call to a member function fetchAll() on a non-object in D:\PC_webserver\wwwroot\pdo\pdo_class27.php on line 75
按照视频教程敲的代码,对比了视频的代码,还是报错啊

<?php
error_reporting(E_ALL);
//header("Content-type:text/html;charset=utf-8");
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 static $error=null;//保存错误信息

    public function __construcr($dbConfig) {


        if (!class_exits("PDO")) {

            self::throw_exception('不支持');
        }

        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::ATR_SERVER_VESION"));
            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 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 free() {

        self::$PDOStatement=null;
    }

    public static  function haveErrorThrowException() {

        $obj=empty(self::$PDOStatement)?self::$link:self::$PDOStatement;
        $arrError=$obj->errorInfo();
        //print_r($arrError);
        if ($arrError[0]!='000000') {
            self::$error='SQLSTATE'.$arrError[0].'SQLERR'.$arrError[2].'<br/>Error SQL'.self::$queryStr;
            self::throw_exception(self::error);
            return false;
        }
        if (self::$queryStr=='') {
        self::throw_exception('没有执行的sql语句');
        return false;
        }
    }
/**
*字定义错误处理
*@param unknown $errMsg
*/
    public static function  throw_exception($errMsg) {

        echo $errMsg;

    }
}
?>
<?php
require_once 'config.php';
$PdoMySql=new PdoMySql;

var_dump($PdoMySql);

$sql='select * from user';
print_r($PdoMySql->getAll($sql));
?>
我去掉require_once 'config.php';也是提示Fatal error:  Call to a member function fetchAll() on a non-object in D:\PC_webserver\wwwroot\pdo\pdo_class27.php on line 77


正在回答

3 回答

你的fetchall方法没写吧,你看看你代码

^-^...

0 回复 有任何疑惑可以回复我~

你解决了问题了么 遇到了和你一样的问题

0 回复 有任何疑惑可以回复我~

你说完getAll方法就说了query方法

然后在getAll里面用了fetchAll


视频里你也没有写过fetchAll的方法呀


视频5.2开始到5.3  是按照你视频课程抄的代码,是不是视频搞错俩 ,老师检查一下

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
PDO—数据库抽象层
  • 参与学习       30043    人
  • 解答问题       396    个

本教程主要通过实战演练深入剖析PDO以加深理解

进入课程
意见反馈 帮助中心 APP下载
官方微信