【问题标题】:Static connection PDO静态连接 PDO
【发布时间】:2019-05-20 10:15:13
【问题描述】:

自从我将我的课程改为静态并尝试学习 OOP。我的 PDO 停止工作。

你们有什么线索吗?由于 PDO 连接在 DBconnect 中应该可以正常工作吗?

这是我的代码:

<?php

Class Db{

    private static $dbHost;
    private static $dbUser;
    private static $dbPass;
    private static $dbName;
    private static $dbResult = null;
    public static $dbConnect = null;

    public static function connection(){

        self::$dbHost = '***';
        self::$dbUser = '***';
        self::$dbPass = '***';
        self::$dbName = '***';

        try{
            self::$dbConnect = new PDO('mysql:host='. self::$dbHost . ';dbname=' . self::$dbName,
                self::$dbUser,
                self::$dbPass);

        }catch(PDOException $e){
            echo 'Connection error: ' . $e->getMessage();
        }
    }

    public static function query($sql, $array = []){

        self::$dbResult = self::$dbConnect->prepare($sql);

        self::$dbResult->execute($array);

    }

    public static function getOne(){

        return self::$dbResult->fetch(PDO::FETCH_ASSOC);
    }

    public static function getAll(){

        return self::$dbResult->fetchAll(PDO::FETCH_ASSOC);
    }

    public static function getCount(){

        return self::$dbResult->rowCount();
    }

}

未捕获的错误:在 null 上调用成员函数 prepare()

【问题讨论】:

  • 很明显,当您调用query 时,它正在尝试使用self::$dbConnect,并且尚未初始化。什么时候调用Db::connection()初始化?
  • @Martin 我将连接存储到变量 dbConnect 中。 self::$dbConnect = new PDO('mysql:host='.self::$dbHost .';dbname='.self::$dbName, self::$dbUser, self::$dbPass);
  • 我知道。你什么时候执行初始化它的代码?你没看我的评论吗
  • @Martin 在我的其他课程中我使用这个: public function __construct(){ $this->connection = self::$dbConnect; }
  • 如果您不执行Db::connection(),则创建$dbConnect 的代码永远不会运行。 $dbConnect 未创建。

标签: php mysql oop


【解决方案1】:

根据我们在 cmets 中的扩展讨论,这是因为您从未创建 $dbConnect,因为您没有执行创建它的函数 (Db::connection())。

在您尝试使用其他静态函数之前,只需在某处运行此代码,您的代码就会运行:

Db::connection();
Db::query(...);
...

【讨论】:

    猜你喜欢
    • 2012-04-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2011-12-24
    • 1970-01-01
    相关资源
    最近更新 更多