TYPECHO WIKI
每一个作品都值得被记录

Typecho 框架基础之数据库类设计

Typecho维基君Typecho教程 • 2582次浏览 • 发布 2015-03-03 • 更新 2019-03-29

Typecho_Db类

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

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

set和get,设置和获取数据库连接资源。
数据库操作函数,包括select/delete/update和insert,以及支持sql语句和query对象的query函数
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)
广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,Typecho.Wiki所有文章均包含本声明。
厂商投放

【腾讯云】🎉五一云上盛惠!云服务器99元/月续费同价!

腾讯云五一劳动节海量产品 · 轻松上云!云服务器首年1.8折起,买1年送3个月!超值优惠,性能稳定,让您的云端之旅更加畅享。快来腾讯云选购吧!

广告
添加新评论 »