我正在使用类来做所有与数据库有关的事情。配置文件中包含一个类,该类具有“连接”功能以建立与数据库的连接。我创建了一个连接文件,其中包含要连接到数据库的信息。现在,为了从特定表中检索数据,我调用了相同的类和“查询”功能。但是在查询功能中,我需要连接功能的$ 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::
访问静态变量。