【问题标题】:new PDO object新的 PDO 对象
【发布时间】:2012-12-16 17:00:01
【问题描述】:

当包含以下代码的脚本被包含到另一个 php 脚本中时会发生什么,它是否每次都会创建一个新的 PDO 对象..?如果是,那么我如何使用在多个 php 脚本中创建一次的单个 PDO 对象..??我不想使用持久连接..

try{    
    $dsn        =   'mysql:host=localhost;dbname=test'; 
    $username   =   'user';
    $password   =   'password'; 
    $conn = new PDO($dsn, $username, $password);
    $conn ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    } catch(PDOException $e) {
    echo 'ERROR: '. $e->getMessage();
}

【问题讨论】:

  • 使用“单例模式”

标签: php mysql object pdo include


【解决方案1】:

您可以在整个脚本中使用单例数据库对象,但是这种方法存在一些缺点,因此您可能需要研究“依赖注入”。

为了避免重复,请查看What is dependency injection? 以获取有关依赖注入的更多信息。

【讨论】:

    【解决方案2】:

    脚本将创建一个新的 PDO 对象并将其分配给变量$conn。关于这部分,“我如何使用在多个 php 脚本中创建一次的单个 PDO 对象”答案是您可以在每个 HTTP 请求中多次重复使用 $conn 变量。您必须为每个请求(网页)创建(至少)一个 PDO 对象。如果您想在几个不同的 PHP 脚本中使用该对象,所有这些脚本都是单个网页的一部分,您可能需要将 $conn 放入 $GLOBALS 变量中,以便它在所有范围和命名空间中都可用。

    【讨论】:

      【解决方案3】:

      你可以这样开始:

      if (!isset($conn)) {
        /* Create connection, copy your code */
      }
      

      但您也应该检查$conn 是否有效。
      使用比$conn(如$global_pdo_connection)更具体的变量名也不错,这样它就不会最终与另一个$conn混淆。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-01
        • 2014-10-28
        • 2011-07-05
        • 2017-06-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多