我现在是,把对数据库的每个表的操作都整成了一个类,可是每个类中都有连接数据库的语句,修改不方便,
请问怎么样,才能写一次链接数据库的语句,
大家都是怎么样操作的啊?
请大家多多指导!!aa表对应的类aa.php class aa{
var $conn; public $adds_id;
public $adds_title;
public $adds_content;
public $adds_time;       

function __construct() {
// 连接数据库
$this->conn = mysqli_connect("localhost", "root", "", "shujukuming");  //连接数据库
mysqli_query($this->conn, "SET NAMES gbk");
}

function __destruct() {
// 关闭连接
mysqli_close($this->conn);
} // 插入新记录
function insert(){
$sql = "insert into aa values('', '" . $this->adds_title . "', '" . $this->adds_content . "',".  $this->adds_time  .")";
$this->conn->query($sql);
}
        }
bb表对应的类bb.php class bb{
var $conn; public $y_id;
public $UserName; // 用户名,保存当前的用户名
public $UserPwd; // 用户密码


function __construct() {
// 连接数据库  ,声明类对象时,执行此构造函数 
$this->conn = mysqli_connect("localhost", "root", "", "shujukuming"); //这里又要连接数据库
mysqli_query($this->conn, "SET NAMES gbk");
}

function __destruct() {
// 关闭连接
mysqli_close($this->conn);
} // 判断指定用户是否存在
function exists($user){    //参数$user 表示指定的 用户名
$result = $this->conn->query("select username,pwd from bb where username='" . $user . "'");
if($row = $result->fetch_array()) {
$this->UserName = $user;
$this->UserPwd = $row['pwd'];
return true;
}
else
return false;
}
         }

解决方案 »

  1. <?php
    class base 
    {
      var $conn;  function __construct() {
                // 连接数据库  ,声明类对象时,执行此构造函数 
                $this->conn = mysqli_connect("localhost", "root", "", "shujukuming"); //这里又要连接数据库
                mysqli_query($this->conn, "SET NAMES gbk");
            }
            
            function __destruct() {
                // 关闭连接
                mysqli_close($this->conn);
            }}class aa extends base {}class bb extends base {}
    ?>
      

  2. 可以看一下Zend_Db,或者简单地用sington模式,网上大把的例子
      

  3. 写错了,singletonclass Db 
    {
     
        protected static $_instance;
        private $conn;
     
        private function __construct(){ 
            $this->conn = mysqli_connect("localhost", "root", "", "shujukuming");
            mysqli_query($this->conn, "SET NAMES gbk");
        }
     
        private function __clone(){ }
     
        public static function getInstance() 
        {
          if( self::$_instance === NULL ) {
            self::$_instance = new self();
          }
          return self::$_instance;
        }    public function query($sql){
           //....
        }
    }
     在任何需要的地方直接用就行了:
    Db::getInstance()->query($sql);
    当然,这样只是一个数据库连接,(大部分应用已经没问题了)如果你需要两个,可以建2个这样的class,
    或者建一个带2个instance的singleton,或者更好地,用Registry模式, (registry模式可以很好地代替全局变量 global),如果你要很多连接,而且会连接到不同数据库...etc, 那就看zend_Db,它综合了几种模式.
      

  4. 继承同一个基类可以把链接字符串放在基类的static成员变量中
      

  5. 补充3楼的
    <?php
    class base 
    {
      var $conn;  function __construct() {
                // 连接数据库  ,声明类对象时,执行此构造函数 
                $this->conn = mysqli_connect("localhost", "root", "", "shujukuming"); //这里又要连……
    [/Quote]class aa extends  base{ function __construct()
    {
    parent::__construct();
    }
    }
    function aa($uid)
    {
    $this->db->query();
    }}
      

  6. include_once()方法能实现吗?
      

  7. 继承pdo类,用它来处理还是不错的!
      

  8. 可以用继承,把两个类里面都存在的对数据库的连接的操作,都放在父类里。子类全都是一些对各表的查询操作。不过从MVC角度讲,数据库的连接的操作其实应该算是model层,而你对各表的连接应该属于control层。应该分开才合理。你可以把对数据库的连接的操作,都放在a类里,new出来的对象作为参数传到b类里面使用。