我正在创建一个数据库连接对象,但我不确定最好的方法是什么……
如果我创建了一个建立连接的dbConnection类(使用mysql_connect),那么我可以从主脚本中的任何地方调用mysql_query吗?
其他类内部的情况又如何呢?我需要将对象或属性作为参数传递吗?
基本上,我正在寻找使用一个简单的类连接到数据库的最佳方式(速度+内存)……
我已经发布了Database Connection类的构造函数:
function __construct($database="") {
if (!empty($database)){ $this->db = $database; }
$this->dblink = mysql_connect($this->host,$this->username,$this->password);
if (!this->dblink) {
//Fatal Error
}
mysql_select_db($this->db, $this->dblink);}
发布于 2009-02-02 20:50:43
我建议您尝试一下ezSQL,而不是创建自己的数据库抽象类。作者做了一项出色的工作,使它非常易于使用。该类执行的查询返回的数据结构比mysql_query返回的数据结构灵活得多,这将为您节省大量工作。
发布于 2009-02-02 21:09:16
你就快到了。我的数据库类是这样的:
class DB {
function __construct($host,$user,$pass,$db) {
// error checking has been removed for brevity
$this->mysql = mysql_connect($host,$user,$pass);
mysql_select_db($this->mysql, $db);
}
function fetchRows($query) {
// error checking removed again
$result = mysql_query($this->mysql);
$return = array();
while($data = mysql_fetch_assoc($result))
$return[] = $data;
mysql_free_result($result);
return $return;
}
}在我的主包含文件中,我有如下内容:
require 'DB.inc.php';
$GLOBALS['DB'] = new DB('localhost', 'root', '', 'my_database');然后,在我的项目的任何部分,我都可以像这样运行查询:
global $DB;
$query = 'SELECT UserID, UserName FROM users';
foreach($DB->fetchRows($query) as $user)
echo "$user[UserID]: $user[UserName]\n";备注:不推荐使用 mysql_pconnect(),有关原因,请参阅manual page用户注释。
发布于 2009-02-02 21:11:32
当要执行查询时,应将连接对象作为参数传递给查询函数。您需要在要运行查询的任何位置访问connection对象。
require_once DBConnection;
require_once SomeClass;
$con = new DBConnection();
$query = "Select * FROM Users";
mysql_query($query, $con->link);
// Use the connection in another class that takes a connection object in the constructor
$someclass = new SomeClass($con);
$someclass->executeQueryThree();但是,我更倾向于在DBConnection类中使用mysql_query作为方法,如下所示:
公共函数查询($query){ $result = mysql_query($query,$this->link);返回$result;}
然后执行以下操作:
$query = "Select * FROM Users";
$con = new DBConnection();
$result = $con->query($query);
// From within SomeClass
$someclass = new SomeClass();
$result = $con->query($someclass->getQuery3());https://stackoverflow.com/questions/504820
复制相似问题