初识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][1]

[1]: http://www.typechodev.com/index.php/archives/17/

原创文章,作者:admin,如若转载,请注明出处:https://www.typechodev.com/mysql/14.html

(1)
上一篇 2014-12-31 上午2:41
下一篇 2014-12-31 上午10:27

相关推荐

发表评论

您的电子邮箱地址不会被公开。