现在世界最流行的博客开源软件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();
}