php对数据库操作中delete的用法,Typecho 对数据库的增删改查操作方法 API

Typecho数据库提供了非常易用的api,和原生SQL写法没有太大的差别,同时也很好地处理了SQL常见的安全问题,如sql注入。本文从实用角度出发,介绍了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即可。

数据查询

1. 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中设定的前缀。

举例:$db->select()->from('table.metas');将生成SELECT * FROM typecho_metas WHERE (mid = '2' ),其中typecho_是表前缀;

而$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` DESCTips: 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' )

2. 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);

3. 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);

4. 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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值