如何在不同的文件中使用 PDO 连接对象

Dur*_*Rao 4 php mysql oop pdo

您好,我是 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);
Run Code Online (Sandbox Code Playgroud)

2) 产品.php

class prdinfo{function 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();
    }
}
}
Run Code Online (Sandbox Code Playgroud)

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

You*_*nse 5

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

  2. 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();
         }
     }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 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'];
     }
    
    Run Code Online (Sandbox Code Playgroud)

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