首页>建站相关>Typecho数据库常用API

Typecho数据库常用API

表的创建和删除

在Typecho插件开发过程中,往往需要创建自己的表。上文提到Typecho_Db类中的query函数,可用于执行所有sql语句,因此我们使用query()来进行表的创建、修改或者删除。

$db= Typecho_Db::get();
$prefix = $db->getPrefix();
$db->query('create table '.$prefix.'metas xxxxx');

注意,使用query方式创建表的时候,需要在表明前手动添加$prefix前缀,否则在后面的使用过程中会造成困惑。还可以使用table.来代替$prefix,typecho会自动识别并替换成指定的前缀。同理,修改或者删除Typecho数据库中表,按照同样的方式调用query即可。

数据查询

select,查询表数据

select语句是可以说Typecho插件开发中最常用的sql调用。

$db = Typecho_Db::get();
$query= $db->select()->from('table.metas');
$result = $db->fetchAll($query);

说明:
typecho中,.号具有特定的意义,这里table.metas表示这是一个metas表。实际上,typecho是自动将table.的字符使用str_replace替换成了config.inc.php中设定的前缀。
举例:

  1. $db->select()->from('table.metas');
    将生成SELECT * FROM typecho_metas WHERE (mid= '2' ),其中typecho_是表前缀;
  2. $db->select()->from('metas');
    生成SELECT * FROM metas WHERE (mid= '2' ),注意这里没有了表前缀。

指定表字段查询

有时为了提高查询性能,需要指定查询表中特定的几个字段,那么可以使用下面的方式:

$query= $db->select('mid','name')->from('table.metas'); 
echo $query; //SELECT `mid` , `name` FROM typecho_metas

如果联合查询中,两个表存在相同的字段名,那么可以使用table.来指定表名:

$query = $db->select('table.contents.cid')->from('table.contents')->join....

指定查询条件

指定SQL查询的where语句,是最常用的api调用。

$query= $db->select('mid','name')->from('table.metas')->where('mid = ?', 2); 
echo $query; //SELECT * FROM typecho_metas WHERE (`mid` = '2' )

如需要指定多个查询条件,直接多次调用where即可,将生成and关系的where条件

$db->select('mid','name')->from('table.metas')->where('mid = ?', 2)->where('name like ? ', $name);

使用OR关系的查询条件

可以使用orWhere()函数来指定SQL查询的或条件。

$db->select('mid','name')->from('table.metas')->where('mid = ?', 2)->orWhere('mid = ? ', 3);
//SELECT `mid` , `name` FROM typecho_metas WHERE (`mid` = '2' ) OR (`mid` = '3' )

指定查询范围

在需要分页的场景下,分页是必需的操作。offset()和limit()分别用于指定起始位置和结束位置,即指定查询范围。

$query = $db->select('mid','name')->from('table.metas')->offset(2)->limit(3);
echo $query;//SELECT `mid` , `name` FROM typecho_metas LIMIT 3 OFFSET 2
Typecho中,还提供了一种简写的方法,见page()函数。
$query = $db->select('mid','name')->from('table.metas')->page(3,10);
echo $query;//SELECT `mid` , `name` FROM typecho_metas LIMIT 10 OFFSET 20
//表示取第三页,并取10条记录。

对查询结果进行排序

在Typecho中,使用order()函数和Typecho_Db::SORT_DESC指定查询结果的排序方式。

$query = $db->select('mid','name')->from('table.metas')->order('mid',Typecho_Db::SORT_DESC);
echo $query;//SELECT `mid` , `name` FROM typecho_metas ORDER BY `mid` DESC
Tips: Typecho_Db::SORT_ASC 表示升序排序,Typecho_Db::SORT_DESC表示降序排序

联合查询

联合查询是SQL的常用语法,在Typecho中,同样使用内置函数join()方便地进行联合查询。

$query = $db->select()
    ->from('table.contents')
    ->join('table.comments', 'table.contents.cid = table.comments.cid',Typecho_Db::LEFT_JOIN)
    ->where('table.contents.type = ?', 'post');
echo $query;
//SELECT * FROM typechocontents LEFT JOIN typecho_comments ON typecho_contents.`cid` = typecho_comments.`cid` WHERE (typecho_contents.`type` = 'post' )

数据增删改

update,更新表数据
Typecho中,使用update()函数来进行更新表操作。但注意,update操作,需要借助于query执行。

$update = $db->update('table.metas')->rows(array('name'=>'case_in_cn'))->where('mid=?',6);
echo $update;//UPDATE typecho_metas SET `name` = 'some_name' WHERE (`mid`='6' )
//执行后,返回收影响的行数。
$updateRows= $db->query($update);

insert,插入数据
Typecho中,使用insert()函数来进行表插入操作。同样,insert操作需要借助于query函数。

$insert = $db->insert('table.metas')
    ->rows(array('mid' => '22', 'name' => 'hello world'));
//将构建好的sql执行, 如果你的主键id是自增型的还会返回insert id
$insertId = $db->query($insert);

delete,删除数据
Typecho中使用delete()函数来删除数据表中的行。delete操作用于删除数据表中指定的行,同样需要借助query函数执行。

$delete = $db->delete('table.metas')
    ->where('mid = ?', 2);
//将构建好的sql执行, 会自动返回已经删除的记录数
$deletedRows = $db->query($delete);

数据库调试

查看查询语句

在Typecho调试过程中,打印sql语句往往是很有帮助的。对于大于5.2版本的php,直接echo $query即可,对于小于5.2版本,则需要显式调用__toString()函数

$select = $db->select()->from('table.metas');
//如果版本大于php5.2
echo $select;
//如果小于php5.2
echo $select->__toString();

文章来源

本文系转载,文章源自“博客簿”,虽然“博客簿”也标注了这篇文章系转载自“typechodev.com”,但再追溯过去就是其他的内容的,可能“typechodev”已经转手他人的原因吧。世事变迁,沧海桑田,虽然很多站点已经不再,但内容仍然薪火相传。

Typecho数据库常用API

标签: typecho

移动端可扫我直达哦~

推荐阅读

typecho 2024-04-20

typecho根据标签的slug name信息判断是否输出免责声明

博主是从事机械行业的,工作过程中接触了很多二手老旧的设备,因为是二手设备,不缺胳膊少腿能正常运行已是难得,完善的说明书与售后服务想都不要想了。所以找设备的说明书成了一项附加的工作,总得让设备正常运行起来,偶尔设备有个小病小痛的,也不能...

建站相关 typecho

typecho 2023-11-02

Typecho开发文档-Widget设计文档

什么是WidgetWidget是组成Typecho的最基本元素,除了已经抽象出来的类库外,其它几乎所有的功能都会通过Widget来完成.在实践中我们发现,在博客这种小型但很灵活的系统中实施一些大型框架的思想是不合适的,它会使系统灵活性...

建站相关 typecho

typecho 2023-10-25

Typecho默认路由表一览

路由器(Route)路由器(Route)是Typecho系统中的一个重要组件,类似mod_rewrite的机制,来实现独立的URL和指定的controller/action/params的映射规则.它通过识别诸如http://loca...

建站相关 typecho

typecho 2023-10-21

Typecho自动更新指定文章内容的尝试

曾经在老的博客(wordpress)里尝试并且成功运行过的一个方案,定时去请求某个比如“每天60秒读懂世界”这样的api,获取到数据,然后根据数据更新某一篇博文的内容。因为有“轻微”的强迫症,所以习惯把不用的东西直接“rm -rf”删...

建站相关 typecho

typecho 2023-10-18

让typecho博客支持显示数学公式

MathJax是一个开源的基于Ajax的数学公式显示的解决方案,结合多种先进的Web技术,支持主流的浏览器。MathJax根据页面中定义的LaTex数据,生成对应的数学公式。具体可见:mathjax项目代码(GitHub)因为是利用j...

建站相关 typecho

typecho 2023-10-15

为Typecho编辑器增加HTML标签支持

这几天为Typecho编辑器基本不支持块级元素而困扰,在github上翻编辑器插件的时候意外看到有位望友说可以去修改Hyperdown.php文件以增加对HTML标签的支持。该文件位于:build/var/HyperDown.php需...

建站相关 typecho

typecho 2023-10-12

typecho为什么更换主题后部分图片无法正确显示

其实严格的说,这可能是博主自己主题的问题,但人类的悲欢偶尔相通么,没准也可能在其他的主题中遇到类似的。博主之前边写博客边修改拼凑了一个比较简陋的主题,使用一段时间后,觉得主页过于单调了,于是在23年的国庆前后对主题整体做了一个比较大的...

建站相关 typecho

typecho 2023-10-05

typecho输出标签云或生成热门标签

小鸟数据生成标签云的代码应该是仿自默认的纯白主题,为了显示彩色标签,所以为tags增加了几个随机的类,事实上这几个类完全可以利用jquery在前端添加,毕竟现在用户的电脑性能远远超过了自己小水管服务器的性能,php添加随机类的写法:&...

建站相关 typecho