Как сделать только одно mysql соединение с PDO - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь установить только одно соединение с моим кодом внизу.

Внутри забавы c. php Я добавил функцию __construct, но она не работает. Ошибка:

Uncaught Ошибка: вызов защищенного метода dbh :: connect () из контекста 'getPosts'.

Я прочитал несколько статей и не совсем понял где должна быть размещена функция __construct. Внутри моего соединения. php или весело c. php?

public $conn;

public function __construct() {
    $this->conn = new dbh();
    $this->conn = $this->conn->connect();

}

МОЙ код: подключить. php

    class dbh{

        private $host = "localhost";
        private $user = "root";
        private $pwd = "12345";
        private $dbname = "posts";

        protected function connect() {
            $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
            $pdo = new PDO ($dsn, $this->user, $this->pwd);
            $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
            return $pdo;

    }
}

веселье c. php

class PostsData extends dbh{

    public function getPosts() {

            $sql = "SELECT * FROM posts_tbl";
            $stmt = $this->connect()->prepare($sql);
            $stmt->execute();
            $result = $stmt->fetchAll((PDO::FETCH_OBJ));

            return $result;
    }

    public function addPost($filter_author, $filter_title, $filter_txt) {

            $sql = "INSERT INTO posts_tbl (post_author, post_title, post_txt) VALUES (?, ?, ?, ?)";
            $stmt = $this->connect()->prepare($sql);
            $stmt->execute([$filter_author, $filter_title, $filter_txt]);

        }

    }

1 Ответ

0 голосов
/ 15 февраля 2020
class PostsData extends dbh{


private $conn;

public function __construct() {
$this->conn = new dbh();
$this->conn = $this->conn->connect();

}



   public function getPosts() {

            $sql = "SELECT * FROM posts_tbl";
            $stmt = $this->connect()->prepare($sql);
            $stmt->execute();
            $result = $stmt->fetchAll((PDO::FETCH_OBJ));

            return $result;

    }

    public function addPost($filter_author, $filter_title, $filter_txt) {

            $sql = "INSERT INTO posts_tbl (post_author, post_title, post_txt) VALUES (?, ?, ?, ?)";
            $stmt = $this->connect()->prepare($sql);
            $stmt->execute([$filter_author, $filter_title, $filter_txt]);

        }

    }

$post = new PostsData();
$posts = $post->getPosts();

foreach ($posts as $post) { 

echo $post->post_title;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...