Неперехваченная ошибка: вызов функции-члена prepare () (PDO, php) - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь получить данные из таблицы с помощью функции publi c в PHP, но получаю следующую ошибку:

Неперехваченная ошибка: вызов функции-члена prepare ( ) (PDO, php)

Ищу 2, 3 часа ... Но нет аналогичного результата или я не понял.

<?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];
    }

}

?>

И Я использую это в своем базовом файле:

<h1><?php echo Config::GetData("page_details", "Moto", 1) ?></h1>

Ошибка из этой строки:

$wc = self::$SQL->prepare('SELECT `'.$data.'` FROM `'.$table.'` WHERE `ID` = ?');

1 Ответ

0 голосов
/ 02 августа 2020

Есть ли какая-то особая причина, по которой вы хотите использовать STATIC везде? Обычный подход заключается в использовании методов и свойств publi c, Dynami c. Я переписал ваш образец с помощью предложенного соглашения об именах в PHP OOP, оно работает:

<?php

class Config
{

    /** @var PDO $conn */
    private $conn = null;

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

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

    public function findById($table, $data, $id)
    {
        $stmt = $this->conn->prepare('SELECT `' . $data . '` FROM `' . $table . '` WHERE `uid` = ?');
        $stmt->execute(array($id));

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

}

// just for test
$cfg = new Config();
print_r($cfg->findById('foo', '*', 1));

или в вашем случае

<?php echo $cfg->findById("page_details", "Moto", 1)['Moto'] ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...