Как создать 2 экземпляра подключения к базе данных PDO PHP - PullRequest
0 голосов
/ 17 ноября 2018

В настоящее время у меня есть класс, который создает одно соединение с базой данных, однако я бы тоже хотел создать другое соединение.Я попытался скопировать структуру класса, но просто переименовал переменные и функции, однако это не работает, и кажется, что он не определяет, где находится мое новое соединение PDO, когда я получаю ошибку Uncaught Error: Call to a member function prepare() on null in.Каков наилучший подход в моем случае при создании 2 подключений к базе данных?

config.php:

<?php

class Database
{   
    private $host = "localhost";
    private $db_name = "database1";
    private $username = "root";
    private $password = "";
    public $conn;

    public function dbConnection()
    {

        $this->conn = null;    
        try
        {
            $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   
        }
        catch(PDOException $exception)
        {
            echo "Connection error: " . $exception->getMessage();
        }

        return $this->conn;
    }
}

?>

class.user.php:

class USER
{   

    private $conn;

    public function __construct()
    {
        $database = new Database();
        $db = $database->dbConnection();
        $this->conn = $db;
    }

    public function runQuery($sql)
    {
        $stmt = $this->conn->prepare($sql);
        return $stmt;
    }
}

1 Ответ

0 голосов
/ 17 ноября 2018

Вы можете создать свой класс User и передать соединение конструктору.Это даст вам гибкость в замене соединения.

Что касается класса вашей базы данных, то, по-видимому, это оболочка для создания соединения PDO.Вы можете покончить с этим или расширить класс другими параметрами.

Возможно, посмотрите на внедрение зависимостей и контейнеры.Они могут помочь вам здесь.

<?php  
class User
{   

    private $conn;

    public function __construct(PDO $conn)
    {
        $this->conn = $conn;
    }

    public function runQuery($sql)
    {
        $stmt = $this->conn->prepare($sql);

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