如何创建2个PDO数据库连接实例PHP

时间:2018-11-17 09:04:08

标签: php mysql pdo

我目前有一个创建一个数据库连接的类,但是我也想创建另一个连接。我曾尝试复制类结构,但只是重命名变量和函数,但是这不起作用,并且当我收到错误Uncaught Error: Call to a member function prepare() on null in时,它似乎无法检测到新的PDO连接在哪里。在我的情况下,创建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 :(得分:0)

您可以创建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;
    }
}