我正在使用类来做所有与数据库有关的事情。配置文件中包含一个类,该类具有“连接”功能以建立与数据库的连接。我创建了一个连接文件,其中包含要连接到数据库的信息。现在,为了从特定表中检索数据,我调用了相同的类和“查询”功能。但是在查询功能中,我需要连接功能的$ conn。我在面向对象方面有点虚弱。谁能指导我如何进行这项工作。我在下面包含了我的文件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");

最佳答案

首先,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");


这是所有定义为静态的版本:

<?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::访问静态变量。

10-07 19:47
查看更多