上一篇:什么是中国梦?
下一篇:广州亚运英文翻译又出丑(图)
仿WordPress写和使用一个数据库类
米娅 2010年11月7日 22:33:06

现在世界最流行的博客开源软件WordPress就是借鉴这个:
PHP and Working with Databases (for the Lazy Sod)

这两天的收获:

1,把数据库链接写到类的构造函数里,就是同类同名的函数,这样,在生成对象时会执行这个函数;比如类名是crdb,写在函数function crdb(){}里;
2,在类的同一文件(比如,crdb.php)的最后,写如下的函数,用if ( ! isset( $crdb ) ) 判断一下,这样,如果已经建立了数据库连接,就不用重新再建立了:
if ( ! isset( $crdb ) ) {
  $crdb = new crdb( DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD );
}

在程序中加如下两行代码:
require('crdb.php');
global $crdb;

就可以用 $crdb->function1(); ,假设function1()是类crdb中的函数,引用类crdb中的函数了;
3,考虑尽量用php函数,因为这样如果数据库类型有变化,比如,mySQL换为oracle,修改数据库类就可以了,不用修改其他程序;如下:
  function crdb($dbhost, $port, $database_name, $dbusername, $dbpasswd){  
     $connection = @mysql_connect("$dbhost:$dbport", "$dbusername", "$dbpasswd")
       or die ('Couldn\'t connect to server.');  
     $serverinfo = mysql_get_server_info($connection);
     if ($serverinfo > '4.1') {
       mysql_query("SET     character_set_connection=utf8,character_set_results=utf8,character_set_client=binary",$connection);
     } 
     $db = @mysql_select_db("$database_name", $connection)
       or die('Couldn\'t select database.');
     return $db; 
  }
4,将查询返回值放到一个object变量里,这样可以用“$a->b”形式来取得值。
function query($sql) {
  $this->result = mysql_query($sql)
   or die ( 'It Didn\'t Work: ' . mysql_error() );  

  $num_rows = 0;
  while ( $row = @mysql_fetch_object( $this->result ) ) {
        $this->last_result[$num_rows] = $row;
        $num_rows++;  
  }
 
  @mysql_free_result( $this->result );
 
  $this->num_rows = $num_rows;  
  
  return $this->last_result;

程序中这么引用:

    require_once("cr_db.php");
    global $crdb;

    $sql = " select subject from c_table";
    $rows = $crdb->query($sql);    
  
    $i=0;
    foreach ($rows as $row) {
      $i = $i + 1;
      echo $row->subject;
    }    
 
    $crdb->flush();

5,这样的一个问题是,每次需要清理一下$this->last_result,否则会有上一次查询结果的残留,如上面的$crdb->flush()函数,这么写:
  function flush() {
     $this->last_result = array();
  }


共1页
相关链接
1. 查找数据库的重复记录(附SQL语句)
2. 将数据库表的两个字段合并为一个字段(附SQL语句)
3. Drupal 7: 多站点,一套核心代码,一套数据库,共用用户数据,一次登陆,同步session
4. Drupal 7: 用户角色、权限的函数、变量及数据库表
5. 将Excel数据保存到MySQL数据库及PHP读Excel数据(附代码)
6. 从数据库表中复制一行(Insert, Select) (附SQL语句)
7. 如何备份、恢复MySQL数据库
8. MySQL的数据库备份问题
9. MySQL数据库的汉字乱码问题