如何在类中使用PDO连接工作

时间:2017-03-16 06:22:42

标签: php mysql pdo

我正在使用类来完成所有与数据库相关的事情。在配置文件中包含一个具有“连接”的类。用于建立与数据库的连接。我创建了一个连接文件,其中包含连接数据库的信息。现在,为了从特定的表中检索数据,我调用了同一个类并且“查询”#39;功能。但在Query函数中,我需要$ conn的Connect函数。我在面向对象方面有点弱。任何人都可以指导我如何才能完成这项工作。我在下面包含了我的文件config.php,connection.php和index.php文件。

config.php page

<?php
class DBConnection{
    public function __construct(){
    }
    public function Connect(){
        try {
            $conn = new PDO('mysql:host='.$this->server_name.';dbname='.$this->db,$this->user, $this->pass); 
            $conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
            $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

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

    static public function Query($sql){
        return $conn->prepare($sql);
    }
}

connection.php page

<?php
require_once('config');

$default=array(
    'DB_SERVER'=>'Localhost',
    'DB_USER'=>'root',
    'DB_PASS'=>'',
    'DB_NAME'=>'hqe'    
    );

$m_db = new DBConnection();
$m_db->server_name=$default['DB_SERVER'];
$m_db->user=$default['DB_USER'];
$m_db->pass=$default['DB_PASS'];
$m_db->db=$default['DB_NAME'];

$m_db->Connect();

index.php page 

<?php
include("connection.php");
$usr = DBConnection::Query("Select id, first_name, last_name from tbl_user");  

1 个答案:

答案 0 :(得分:1)

首先,Connect()是成员函数,而Query($sql)是静态函数。我建议以相同的方式定义,无论是成员还是静态。

需要从两个方法都可以访问下一个$conn,因此在Connect()中将其设为类变量而不是局部变量。

这是一个没有静态函数/变量的版本:

<?php
class DBConnection{

    private $conn;

    public function __construct(){
    }
    public function Connect(){
        try {
            $this->conn = new PDO('mysql:host=localhost;dbname=hqe', 'root', ''); 
            $this->conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
            $this->conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

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

    public function Query($sql){
        return $this->conn->prepare($sql);
    }
}

如您所见,使用$this访问成员变量。此外,您需要类的对象来调用Query()。类似的东西:

$c = new DBConnection();
$c->Query("Select id, first_name, last_name from tbl_user");

这是一个将all定义为static的版本:

<?php
class DBConnection{

    private static $conn;

    public function __construct(){
    }
    public static function Connect(){
        try {
            self::$conn = new PDO('mysql:host=localhost;dbname=hqe', 'root', ''); 
            self::$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
            self::$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

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

    static public function Query($sql){
        return self::$conn->prepare($sql);
    }
}

如您所见,使用self::访问静态变量。