1

我正在创建一个数据库连接对象,但我不确定最好的方法是什么......

如果我创建一个建立连接的 dbConnection 类(使用 mysql_connect),我可以从主脚本中的任何位置调用 mysql_query 吗?

从其他类里面呢?我需要将对象或属性作为参数传递吗?

基本上,我正在寻找使用简单类一次连接到数据库的最佳方式(在速度+内存方面)......

我已经发布了数据库连接类的构造函数:

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);

}

4

3 回答 3

1

我建议不要创建自己的数据库抽象类,而是尝试使用ezSQL。作者在使它非常易于使用方面做得非常出色。类完成的查询返回的数据结构比 mysql_query 返回的数据结构灵活得多,它会为您节省大量工作。

于 2009-02-02T20:50:42.613 回答
1

您快到了。我的数据库类是这样的:

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(),请参阅手册页用户评论,原因有一些。

于 2009-02-02T21:09:16.213 回答
0

当您要执行查询时,应将连接对象作为参数传递给查询函数。您需要在要运行查询的任何地方访问连接对象。

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); 返回$结果;}

然后执行以下操作:

$query = "Select * FROM Users";
$con = new DBConnection();
$result = $con->query($query);

// From within SomeClass
$someclass = new SomeClass();
$result = $con->query($someclass->getQuery3());
于 2009-02-02T21:11:31.997 回答