Discuz中常用数据库操作

2021-03-20 823 0条评论

插入数据的insert方法:


DB::insert($table, $data, $return_insert_id = false, $replace = false, $silent = false) 




说明

$table 是表名,不用写表前缀;

$data 是插入的键值对,如[‘name’ => ‘nciaer’, ‘age’ => 30,]

$return_insert_id 是返回插入的id

replace 是否是替换插入模式,开启这个得有个主键在数据里吧

$slient 不知道干啥的




例子


$data = [

    'name' => 'nciaer',

    'age' => 30


]

$newid = DB::insert('nciaer_demo', $data, TRUE);






删除数据的delete方法:


DB::delete($table, $condition, $limit = 0, $unbuffered = true)


说明

$table 是表名,不用写前缀

$condition 是条件,可以是数组如[‘id’ => 4],也可以直接是表达式如 ‘id < 3 and status = 0’

$limit 是限制删除的条数,默认就是删除全部符合条件的记录

$unbuffered 貌似是无缓存的执行查询,据说是快点占内存小?

返回删除的行数


例子

DB::delete('nciaer_demo', "name = 'nciaer'"); // 条件表达式

DB::delete('nciaer_demo', ['name' => 'nciaer']); // 数组条件




更新数据的update方法:

DB::update($table, $data, $condition = '', $unbuffered = false, $low_priority = false)



说明

$table 是表名,不用加前缀

$data 是更新的数据,数组类型,如[‘name’ => ‘mickey’, ‘age’ => 30]

$condition 是条件,空的话会全部更新,可以传表达式及数组,跟delete方法类似

$unbuffered 无缓存的执行查询

$low_priority 降低优先级,默认写入优先于读取操作,设置这个参数为TRUE可以保证先读取再写入,用户浏览会快点?

返回影响的行数


例子

DB::update('nciaer_demo', ['name' => 'mickey'], ['id' => 5]); // 数组条件

DB::update('nciaer_demo', ['name' => 'mickey'], 'id = 5'); // 表达式条件




查询一条数据的fetch_first方法:

DB::fetch_first($sql, $arg = array(), $silent = false) 



说明

sqlSQL语句嘛,有两种方式,一种就是纯SQL语句,比如′select∗from′.DB::table(′nciaerdemo′).′whereid=1′,另一种方式是通过占位符的方式,如′select∗fromsqlSQL语句嘛,有两种方式,一种就是纯SQL语句,比如′select∗from′.DB::table(′nciaerdemo′).′whereid=1′,另一种方式是通过占位符的方式,如′select∗fromd代表数字,%s代表字符串,参数就从后面的$arg传入,注意,表名不用写前缀,DB::table方法可以获取完整表名

$arg 占位符的参数数组

不知道干啥的


例子

// 返回一个数组['id' => 1, 'name' => 'nciaer']

$rs = DB::fetch_first('select * from '.DB::table('nciaer_demo').' where id = 1');

$rs = DB::fetch_first('select * from %t where id = %d', ['nciaer_demo', 1]);




查询多条数据的fetch_all方法

DB::fetch_all($sql, $arg = array(), $keyfield = '', $silent=false)


说明

返回的是2维数组

前两个参数跟fetch_first一样,不解释

$keyfield 参数是设置返回结果集的数组的键,默认是从0开始的索引嘛,这个可以设置某个字段的值作为键

$slient 不知道干啥的


例子

// 返回二维数组,如:

[

    ['id' => 1, 'name' => 'nciaer', 'status' => 1],

    ['id' => 2, 'name' => 'mickey', 'status' => 1]

]

$rs = DB::fetch_first('select * from %t where status = %d', ['nciaer_demo', 1]);




查询某个字段值的result_first方法:

DB::result_first($sql, $arg = array(), $silent = false) 


说明

参数跟之前都一样,没啥好说的,这个方法就是来获取某个字段的值,所以查询里最好只写一个字段,结果集也得是唯一的


例子

// $name 的值就是字段的值,如nciaer,select后面只有一个字段

$name = DB::result_first('select name from %t where id = %d', ['nciaer_demo', 1]);



总结:

这些方法定义在source/class/discuz/discuz_database.php文件中,还有很多其他的没说到,以后用到再记录吧。


文章版权及转载声明

本文作者:符文浩 网址:http://blog.fuwenhao.com/post/384.html 发布于 2021-03-20
文章转载或复制请以超链接形式并注明出处。

发表评论

快捷回复:

评论列表 (暂无评论,823人围观)参与讨论

还没有评论,来说两句吧...

取消
微信二维码
微信二维码
支付宝二维码