4

您好,我是 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) 产品.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();
    }
}
}

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

4

3 回答 3

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();
         }
     }
    
  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'];
     }
    

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

于 2013-10-05T10:21:05.343 回答
2

最简单的方法是在“database.php”之类的单独文件中进行数据库连接,然后您可以在您正在创建的每个新页面上包含此文件......例如,如果您正在创建像“dothis.php”这样的页面“。然后在你的 dothis.php 页面的顶部写一个语句include_once ('/path/to/your/file/database.php'); 然后你可以$db在整个文件中使用你想要的任何地方的对象。

于 2013-10-05T06:44:57.943 回答
0

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

于 2013-10-05T06:34:02.617 回答