我正在使用类来完成所有与数据库相关的事情。在配置文件中包含一个具有“连接”的类。用于建立与数据库的连接。我创建了一个连接文件,其中包含连接数据库的信息。现在,为了从特定的表中检索数据,我调用了同一个类并且“查询”#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");
答案 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::
访问静态变量。