初识Typecho的数据库设计

Typecho_Db类

Typecho_Db类位于var/Typecho/Db.php文件中,定义了DB连接资源和DB操作函数,譬如get()/select()/delete()/insert()/update()等。

仔细阅读代码,Typecho_Db类主要封装了三类操作:

  1. set和get,设置和获取数据库连接资源。
  2. 数据库操作函数,包括select/delete/update和insert,以及支持sql语句和query对象的query函数
  3. fetchAll,fetchRow以及fetchObject,从resource中获取具体数据的函数。

1.1. 设置和获取数据库资源

在get()之前需要先调用set(),但set()函数在config.inc.php中由系统调用,所以我们无需关心set的过程,但需要了解get()函数的用法。在一般的插件制作过程中,在使用typecho数据库之前,需要调用get函数来获取资源,譬如:

 $db = Typecho_Db::get();
 $query= $db->query('some sql statment');

这样,通过静态方法get(),即可获取Typecho中的单例MySQL连接实例,从而进行下一步的数据库操作,而无需关心数据库的连接细节。

1.2. 数据库操作

Typecho_Db类封装了四种最常用的数据库操作,依次是select、update、delete和insert,另外还提供了最基本的query查询函数

1.2.1 select/update/delete/insert的用法请参考下面的例子,为了集中讲解,这里不详细展开说明

1.2.2 query的可以支持更加复杂的sql操作,譬如drop等。

 $db = Typecho_Db::get();
 $query = $db->query('select * from '.$db->getPrefix().'metas ');

tips: $db->getPrefix() 函数获取在config.inc.php中配置了的表前缀,用于配置完整的表名。

query函数还可以接受Typecho_Db_Query对象,譬如:

$db=Typecho_Db::get();
$query=$db->select()->from('table.metas');
echo $query;//select * from typecho_metas;

1.3. 获取查询数据

如上文1.2.2中例子,假如已经获取了query,那么可以通过fetchAll、fetchRow或者fetchObject这三个方法进行数据获取。

1.3.1 fetchAll抽取所有行

$rows = $db->fetchAll($query);
foreach($rows as $row){
    var_dump($row); //每一行的详细内容
}

1.3.2 fetchRow,每次抽取一行数据,返回Array类型

while($row = $db->fetchRow($query)){
    $mid=$row['mid'];     
    //.......
}

1.3.3 fetchObject,类似fetchRow,但返回Object类型

while($row = $db->fetchObject($query)){
    $mid=$row->mid;     
    //.......
}

注意:从例子可以看出,fetchObject和fetchRow的主要区别在于返回的类型不同,进而导致获取对象属性的方式不同而已。

适配器类,Typecho_Db_Adapter/Typecho_Db_Adapter_Mysql

Typecho_Db_Adapter_Mysql位于var/Typecho/Db/Adapter/Mysql.php中,这只是一个适配器,无需过分关注。

SQL查询操作类Typecho_Db_Query

Typecho_Db_Query位于var/Typecho/Db/Queury.php中,其中定义了query操作,包括where、limit等。

列举Typecho_Db_Query的常用函数,方便快速查找

$ var_dump(get_class_methods($db->select()->from('metas')));
array (size=21)
  0 => string '__construct' (length=11)
  1 => string 'setDefault' (length=10)
  2 => string 'getAttribute' (length=12)
  3 => string 'cleanAttribute' (length=14)
  4 => string 'join' (length=4)
  5 => string 'where' (length=5)
  6 => string 'orWhere' (length=7)
  7 => string 'limit' (length=5)
  8 => string 'offset' (length=6)
  9 => string 'page' (length=4)
  10 => string 'rows' (length=4)
  11 => string 'expression' (length=10)
  12 => string 'order' (length=5)
  13 => string 'group' (length=5)
  14 => string 'having' (length=6)
  15 => string 'select' (length=6)
  16 => string 'from' (length=4)
  17 => string 'update' (length=6)
  18 => string 'delete' (length=6)
  19 => string 'insert' (length=6)
  20 => string '__toString' (length=10)

从这里查找常用数据库操作API


版权声明:未经书面授权禁止转载、摘编、复制或建立镜像。对既成事实本站将保留所有的权利。