【问题标题】:Method to detect if a PDO mysql connection is already established PHP检测是否已建立 PDO mysql 连接的方法 PHP
【发布时间】:2015-12-16 14:56:52
【问题描述】:

我在某个 php 页面上使用三个不同的类来从我的数据库中提取一些数据。每个类都使用 PDO 执行自己的连接过程。如何使用 pdo 检查是否已与 mysql 建立连接?我的连接代码如下:

try
{
    $DB_con = new PDO("mysql:host={$db_host};dbname={$db_name}",$db_user,$db_pass);
    $DB_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $DB_con->exec("SET CHARACTER SET utf8"); 
}
catch(PDOException $exception)
{
    echo $exception->getMessage();
}

【问题讨论】:

  • 依赖注入!不要“检查”,知道。知道的方法是您只创建一个 PDO 实例,然后将其传递给您的每个类。
  • 使用注册模式或单例来确保你只使用一个连接!

标签: php mysql pdo


【解决方案1】:

解决方案是创建一个公共 $DB 属性(在每个类中),然后当您在单个页面上实例化每个类时,您将以前的类 DB 参数传递给它,如下所示:

class a {

    public $db = null

    public function setDB($db = null){
        if (is_null($db)){
            try
            {
                $DB_con = new PDO("mysql:host={$db_host};dbname={$db_name}",$db_user,$db_pass);
                $DB_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $DB_con->exec("SET CHARACTER SET utf8"); 
$this->db = $DB_con;
            }
            catch(PDOException $exception)
            {
                echo $exception->getMessage();
            }       
        } else {
            $this->db = $db;
        }
    }
}

b 类和 c 类将与 a 类相同

然后在你加载的页面上:

$a = new a;
$b = new b;
$b->setDB($a->db);
$c = new c;
$c->setDB($a->db);

然后您可以调用您的 3 个类,但只有 1 个数据库连接

【讨论】:

  • 有什么理由将此未设置为答案?这没有用吗?
猜你喜欢
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 2015-11-30
  • 2017-01-15
相关资源
最近更新 更多