如何在不同文件中使用 PDO 连接对象[重复]

Posted

技术标签:

【中文标题】如何在不同文件中使用 PDO 连接对象[重复]【英文标题】:how to use PDO connection object in different files [duplicate] 【发布时间】:2013-10-12 05:50:46 【问题描述】:

您好,我是 mysql 的 PDO 新手,这是我的两个文件 1) index.php

require_once 'prd.php';
try
    $db = new PDO ('mysql:host=xxxx;dbname=xxx;charset=utf8', 'xxx', 'xxxx');
    echo 'connectd';
catch(PDOException $conError)
    echo 'failed to connect DB' . $conError->getMessage ();

$conn = new prdinfo();
$conn->con($db);

2) product.php

class prdinfofunction con($db)
    try
        foreach($db->query("select * from products where vendor_id = 2" ) as $row)
            $prod_id = $row ['product_id'];
            echo '<br/>' . $prod_id;
        
    catch(PDOException $ex)
        echo 'an error occured' . $ex->getMessage();
    


我的问题是我可以将连接对象传递给每个文件,但是我有很多文件要使用数据库查询,所以我需要将 $bd 传递给所有文件。这给代码带​​来了负担。那么有什么方法可以将数据库与 PDO 连接起来。 谢谢

【问题讨论】:

【参考方案1】:

    pdo.php,取自here。人们经常忽略许多重要的连接选项,所以我不得不写一篇专门的文章来解释如何正确连接 PDO

    product.php

     <?php
     class prdinfo  
      
         function __construct($db)
         
             $this->db = $db;
         
    
         function getVendor($vendor)
         
             $sql = "select * from products where vendor_id = ?";
             $stm = $this->db->prepare($sql);
             $stm->execute(array($vendor));
             return $stm->fetchAll();
         
     
    

    index.php

     <?php
     require 'pdo.php';
     require 'product.php';
    
     $info   = new prdinfo($pdo);
     $vendor = $info->getVendor(2);
     foreach ($vendor as $row)
     
         echo $row['product_id'];
     
    

实现类自动加载而不是手动调用 require 也是一个好主意。

【讨论】:

【参考方案2】:

最简单的方法是在单独的文件中进行数据库连接,例如“database.php”,然后您可以在您正在创建的每个新页面上包含此文件...例如,如果您正在创建一个类似“ dothis.php"。然后在 dothis.php 页面的顶部写一个声明include_once ('/path/to/your/file/database.php'); 那么您可以在整个文件中的任意位置使用您的 $db 对象。

【讨论】:

【参考方案3】:

您可以做的是创建一个 PHP 文件,比如说“pdoconn.php”。在该文件中,准备 $db 对象。最后,对于您的每个 PHP 文件,只需首先包含 pdoconn.php。因此,当您的 PHP 文件被加载时,它们会首先连接到 MySQL 并为您提供 $db 对象。

【讨论】:

以上是关于如何在不同文件中使用 PDO 连接对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在codeigniter普通mysql和自定义pdo中运行并发数据库连接[重复]

如何从 PDO 对象获取连接资源?

制作 PDO mysql 静态连接类的最佳方法?

如何设置数据库的连接数和连接超时时间

如何查看准备好的 PDO SQL 语句 [重复]

如何使用 PDO 跨两个数据库运行连接查询