未捕获错误:调用成员函数prepare()(PDO,php)

未捕获错误:调用成员函数prepare()(PDO,php),php,html,Php,Html,我试图使用PHP中的公共函数从表中获取数据,但出现以下错误: 未捕获错误:调用成员函数prepare()(PDO,php) 我在找两三个小时。。。但没有类似的结果,或者我不理解 <?php class Config { public static $SQL; private function __construct() { $host_name = "localhost"; $base_user = "ro

我试图使用PHP中的公共函数从表中获取数据,但出现以下错误:

未捕获错误:调用成员函数prepare()(PDO,php)

我在找两三个小时。。。但没有类似的结果,或者我不理解

<?php

class Config {

    public static $SQL;

    private function __construct() {
        $host_name = "localhost";
        $base_user = "root";
        $base_pass = "";
        $base_name = "home_page";

        try {
            self::$SQL = new PDO("mysql:host=$host_name;dbname=$base_name", $base_user, $base_pass);
            self::$SQL->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            echo "Connected successfully";
        } catch(PDOException $e) {
            die("Something went wrong, database connection closed. Reason: ". $e->getMessage());
        }
    }

    public static function GetData($table, $data, $id) {
        $wc = Config::$SQL->prepare('SELECT `'.$data.'` FROM `'.$table.'` WHERE `ID` = ?');
        $wc->execute(array($id));
        $r_data = $wc->fetch();
        return $r_data[$data];
    }

}

?>

您想在任何地方都使用
STATIC
有什么特别的原因吗?常用的方法是使用公共的、动态的方法和属性。我用PHPs OOP中建议的命名约定重写了您的示例,它可以工作:



实际上还应该提到,通过设计,您的类应该被调用
连接
并且find*方法应该放在存储库类中,但这取决于您。现在我得到了以下错误:未捕获错误:在不在对象上下文中时在第行使用$this:$stmt=$this->conn->prepare('SELECT
'.$data.'
FROM
'.$table.'
WHERE
uid
=?');您仍然静态调用您的类/方法,告诉我们如何执行?如果您按照我的示例进行测试,您会看到它可以工作。是的,您的示例可以工作。我使用这样的函数->
。但是,您可以返回这个->
数组([Moto]=>my Moto!)
我只需要“My moto!”。建议您这样做。为什么您仍然希望使用静态方法和属性?顺便说一句,按定义构造函数不应该是私有的。您在何时何地创建
配置
对象?
<h1><?php echo Config::GetData("page_details", "Moto", 1) ?></h1>
$wc = self::$SQL->prepare('SELECT `'.$data.'` FROM `'.$table.'` WHERE `ID` = ?');