找回密码
 立即注册
搜索
查看: 1679|回复: 0

【discuz 插件教程】数据库操作(二)

[复制链接]

581

主题

110

回帖

4066

积分

管理员

积分
4066

众神之神

发表于 2014-12-15 16:57:19 | 显示全部楼层 |阅读模式
%s的用法:addslashes对数据进行转义,防止注入漏洞,常用户字符串操作
代码示例

  1. <?php
  2. $data = DB::fetch_first(
  3.         "SELECT * FROM %t WHERE name = %s",
  4.         array(
  5.                 'test_db',
  6.                 'hao'
  7.                 )
  8.         );
  9. debug($data);
复制代码
%s的用法: IN语法,集合查询
代码示例
  1. <?php
  2. $data = DB::fetch_all(
  3.         "SELECT * FROM %t WHERE id IN (%n)",
  4.         array(
  5.                 'test_db',
  6.                 array(2,3,4,5)
  7.                 )
  8.         );
  9. debug($data);
复制代码
数据库自定义query
在数据库操作的时候,并不是所有的操作都可以用,增删改查能够操作的所以就要用到了query方法
方法名:
DB::query()
参数解释:
$sql:自定义SQL语句
$arg:需要绑定的数据
$silent:执行SQL失败时,是否无提示(默认flase)
$unbuffered:是否使用无缓存查询(默认flase)

资源集转换结果集(将资源转换)
方法名:
DB:fetch()
参数解释:
$resourceid:数据库查询的query资源
$type:数组类型
代码示例1.关联索引
  1. <?php
  2.         $query = DB::query(
  3.                 "SELECT * FROM %t WHERE id < %d",
  4.                 array('test_db',5)
  5.                 );
  6.         while ($res = DB::fetch($query)) {
  7.                 $result[] = $res;
  8.         }
  9. debug($result);
复制代码
2.数字索引
  1. <?php
  2.         $query = DB::query(
  3.                 "SELECT * FROM %t WHERE id < %d",
  4.                 array('test_db',5)
  5.                 );
  6.         while ($res = DB::fetch($query,MYSQL_NUM)) {
  7.                 $result[] = $res;
  8.         }
  9. debug($result);
复制代码


3.关联和数字作引二者都有
  1. <?php
  2.         $query = DB::query(
  3.                 "SELECT * FROM %t WHERE id < %d",
  4.                 array('test_db',5)
  5.                 );
  6.         while ($res = DB::fetch($query,MYSQL_BOTH)) {
  7.                 $result[] = $res;
  8.         }
  9. debug($result);
复制代码



自定义一个删除语句代码实例:
  1. <?php
  2.         DB::query("DELETE FROM %t WHERE id = %d",
  3.                 array('test_db',11)
  4.                 );

  5.         debug($query);
复制代码
单字段资源集转换结果集方法

帮助取出指定行的某个字段值,仅取出某一行的第一个字段
方法名:
DB::result()
参数解释:
$resourceid:数据库查询的query资源
$row:指定行的第一个字段
代码实例:
  1. <?php
  2.         $query = DB::query(
  3.                 "SELECT id FROM %t WHERE id < %d ORDER BY id ",
  4.                 array('test_db',5)
  5.                 );
  6.     $data = DB::result($query,2);
  7. /*    应该是从0开始的,如果是要查看第一行,则参数为0
  8.     如果要查看第二行,则参数应该为1*/
  9.     echo $data;
复制代码
result方法一般常用语获取数据表的统计值。
代码实例:
  1. <?php
  2.         $query = DB::query(
  3.                 "SELECT COUNT(*) FROM %t WHERE id < %d ORDER BY id ",
  4.                 array('test_db',8)
  5.                 );
  6.     $data = DB::result($query,0);
  7. /*统计id值小于8的,一共有多少条数据*/
  8.     echo $data;
复制代码
资源集行数计算适用于小数据
如果是在大数据情况下使用:"SELECT COUNT(*) FROM %t WHERE id > %d",
方法名:
DB::num_rows()
参数解释:
$resourceid:数据库查询的query资源



方法一:
  1. <?php
  2.         $query = DB::query(
  3.                 "SELECT COUNT(*) FROM %t WHERE id > %d",
  4.                 array('test_db',6)
  5.                 );
  6.     $data = DB::result($query,0);
  7. /*统计id值大于8的,一共有多少条数据*/
  8.     echo $data;
复制代码
方法2.
  1. <?php
  2.         $query = DB::query(
  3.                 "SELECT * FROM %t WHERE id > %d",
  4.                 array('test_db',6)
  5.                 );
  6.     $data = DB::num_rows($query);
  7. /*统计id值大于8的,一共有多少条数据*/
  8.     echo $data;
复制代码
资源集资源的释放:
由于每一次查询都会产生资源,每一次查询完毕后应将query资源释放,节省内存
方法名:
DB::free_result()
参数解释:
$query:执行SQL语句的query资源
代码实例:
  1. <?php
  2.         $query = DB::query(
  3.                 "SELECT * FROM %t WHERE id > %d",
  4.                 array('test_db',6)
  5.                 );
  6.     $data = DB::num_rows($query);
  7.     DB::free_result($query);
  8.     echo $data;
复制代码

按字段排序可以自动帮助字段处理,自动加上小单引号等。
方法名:
DB:rder
参数解释:
$field:需要排序的字段
$order:排序的方式(DESC:降序 ASC:升序(默认))
代码示例:
  1. <?php
  2.         $query = DB::query(
  3.                 "SELECT * FROM %t WHERE id > %d ORDER BY".DB::order('id','DESC'),
  4.                 array('test_db',6)
  5.                 );
  6.     $data = DB::num_rows($query);
  7.     while ($res = DB::fetch($query)) {
  8.             $result[] = $res;
  9.     }
  10.     debug($result);
复制代码


取值区间设定:

设定sql语句中的limit关键字,可用于分页,取出某一个条目数等等....
方法名:
DB::limit()
参数解释:
$start:开始的索引值(以0开始)
$limit:条目数
比如说要取出前三条,应该是0,3
比如说要取从第5条到第8条(从第五条开始,往后取三条),应该是 (5-1),3也就是4,3
代码示例:
  1. <?php
  2.         $query = DB::query(
  3.                 "SELECT * FROM %t WHERE id > %d ORDER BY".DB::order('id').DB::limit(0,3),
  4.                 array('test_db',6)
  5.                 );
  6.     $data = DB::num_rows($query);
  7.     while ($res = DB::fetch($query)) {
  8.             $result[] = $res;
  9.     }
  10.     debug($result);
复制代码
如果只想取出前3条,不必在limit中写0,3,直接写3即可
  1. <!-- 方法名:
  2. DB:fetch()
  3. 参数解释:
  4. $resourceid:数据库查询的query资源
  5. $type:数组类型 -->

  6. <?php
  7.         $query = DB::query(
  8.                 "SELECT * FROM %t WHERE id > %d ORDER BY".DB::order('id').DB::limit(3),
  9.                 array('test_db',6)
  10.                 );
  11.     $data = DB::num_rows($query);
  12.     while ($res = DB::fetch($query)) {
  13.             $result[] = $res;
  14.     }
  15.     debug($result);
复制代码

字段拼接
方法名:
DB::implode()
取得的结果形式 `id`='10' , `name`='hahah'
好处:自动把字段的值添加引号
自动把字段值转义(防止注入漏洞)
参数解释:
$array:需要拼接的字段数组
$glue:字段拼接的字符串
  1. <?php
  2.         echo DB::implode(array('id' => 10, 'name' => 'hahah"d'),'and');
复制代码
效果:`id`='10' and `name`='hahah\"d'
双引号会自动转义,and为字段拼接的字符串
代码示例
  1. <?php
  2. DB::query("UPDATE %t SET ".DB::implode(array(
  3.         'name' => 'xiaoming',
  4.         'id' => 15,
  5. )).'WHERE id=%d',array(
  6.         'test_db',
  7.         10
  8. ));
复制代码


字段数据设定
帮助设定某一个字段是大于,等于还是小于,以及in,notin等等
方法名:
DB::field()
参数
$filed:需要处理的字段名称
$val:字段对应的值
$glue:链接字段与值的类型
  1. <?php
  2.         echo DB::field('id','99','=');
复制代码
运行结果:`id`='99'

  1. <?php
  2. DB::query("UPDATE %t SET".DB::field('id',99,'=')."WHERE id=%d",array(
  3.         'test_db',5
  4.         ));
复制代码
把id值为5的数据的id值修改为99.
in语法
  1. <?php
  2. echo DB::field('name',array('aaa','bbb','ccc'),'in');
复制代码
运行结果:`name` IN('aaa','bbb','ccc')
  1. <?php
  2. echo DB::field('id',10,'+');
复制代码
运行结果:`id`=`id`+'10'
  1. <?php
  2. echo DB::field('id',10,'<');
复制代码
运行结果:
`id`<'10'
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|十三博客 ( 鲁ICP备2023000528号 )

GMT+8, 2026-6-1 17:26 , Processed in 0.050246 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表