数据库操作,数据库操作对于接口来说是比较重要的一点,一般用PHP操作模式都清楚,但是Think封装了好多方法或者类,供数据库操作。
配置数据库,在database.php里边,例如数据库地址,用户名,密码,表名儿前缀等。
然后在当前控制器引用Db库。
use think\Db;
//插入数据,结果是INT,当前操作后改变的记录数
//$result = Db::execute(‘insert into we_ad values (NULL,60,1,”东软培训”,”thinkphp.com”,1,NULL)’); or
//Db::execute(‘insert into think_user (id, name) values (?, ?)’,[8,’thinkphp’]);
//更新数据,结果是INT
//$result = Db::execute(‘update we_ad set keyword = “迎新晚会” where id = 23′);
//查询数据,结果是数组
//$result = Db::query(‘select * from we_ad’);
//or $result = Db::query(‘select * from we_ad where id=?’,[13]);
//print_r($result);
//删除数据,结果是INT
//$result = Db::execute(‘delete from we_ad where id in(22,23)’);
//查询we_ad表中的第一条数据
//$result = Db::table(‘we_ad’)->find();
//等价于:如果在配置文件中设置了表前缀
//$result = Db::name(‘ad’)->find();
//条件查询
//$result = Db::name(‘ad’)->where(‘id’,17)->find();
//查询表中所有数据
//$result = Db::name(‘ad’)->select();
//查询表中符合条件的所有数据
//$result = Db::name(‘ad’)->where(‘state’,1)->select();
//查询某个字段的值,返回值的类型是字段的类型
//$result = Db::table(‘we_ad’)->where(‘id’,13)->value(‘ad_url’);
//查询某一列的值,返回值是数组,column 方法查询结果不存在,返回空数组
$result = Db::table(‘we_ad’)->column(‘ad_url’);
默认情况下,find和select方法返回的都是数组。
一,查询。
以下引用开发手册里边的教程:
助手函数 系统提供了一个db助手函数,可以更方便的查询: db('user')->where('id',1)->find(); db('user')->where('status',1)->select(); 注意:使用db助手函数默认每次都会重新连接数据库,而使用Db::name或者Db::table方法的话都是单例的。db函数如果需要采用相同的链接,可以传入第三个参数,例如: db('user',[],false)->where('id',1)->find(); db('user',[],false)->where('status',1)->select(); 上面的方式会使用同一个数据库连接,第二个参数为数据库的连接参数,留空表示采用数据库配置文件的配置。 数据集分批处理 如果你需要处理成千上百条数据库记录,可以考虑使用chunk方法,该方法一次获取结果集的一小块,然后填充每一小块数据到要处理的闭包,该方法在编写处理大量数据库记录的时候非常有用。 比如,我们可以全部用户表数据进行分批处理,每次处理 100 个用户记录: Db::table('think_user')->chunk(100, function($users) { foreach ($users as $user) { // } }); // 或者交给回调方法myUserIterator处理 Db::table('think_user')->chunk(100, 'myUserIterator'); 你可以通过从闭包函数中返回false来中止对数据集的处理: Db::table('think_user')->chunk(100, function($users) { // 处理结果集... return false; }); 也支持在chunk方法之前调用其它的查询方法,例如: Db::table('think_user')->where('score','>',80)->chunk(100, function($users) { foreach ($users as $user) { // } });
其他复杂查询查看:http://www.kancloud.cn/manual/thinkphp5/135181 例如模糊搜索等。
二,添加。
$data = ['colu_id' => 61, 'state' => 1,'keyword' => '广告测试','ad_url' => 'http://www.iahes.com/','rank' => 1]; $result = Db::table('we_ad')->insert($data); echo $result; $result返回添加成功的条数,insert 正常情况返回 1。 $result = Db::table('we_ad')->insert($data); 等同于,不同的是name方式是指定了表前缀。 $result = Db::name('ad')->insert($data); 获取当前插入列的主键:data是要插入的数据,数组类型,同上 $result = Db::name('ad')->insert($data); $userId = Db::name('ad')->getLastInsID(); 或者可以浓缩成一句: $userId = Db::name(‘ad’)->insertGetId($data); 插入多条数据: $data = [ ['colu_id' => 63, 'state' => 1,'keyword' => '广告测试1','ad_url' => 'http://www.iahes.com/','rank' => 1], ['colu_id' => 64, 'state' => 1,'keyword' => '广告测试2','ad_url' => 'http://www.iahes.com/','rank' => 1], ['colu_id' => 65, 'state' => 1,'keyword' => '广告测试3','ad_url' => 'http://www.iahes.com/','rank' => 1], ]; $result = Db::name('ad')->insertAll($data); echo $result; //insertAll 方法添加数据成功返回添加成功的条数
三,更新。
更新数据表中的数据 Db::table('think_user') ->where('id', 1) ->update(['name' => 'thinkphp']); 如果数据中包含主键,可以直接使用: Db::table('think_user') ->update(['name' => 'thinkphp','id'=>1]); update 方法返回影响数据的条数,没修改任何数据返回 0 如果要更新的数据需要使用SQL函数或者其它字段,可以使用下面的方式: Db::table('think_user') ->where('id', 1) ->update([ 'login_time' => ['exp','now()'], 'login_times' => ['exp','login_times+1'], ]); 更新某个字段的值: Db::table('think_user') ->where('id',1) ->setField('name', 'thinkphp'); setField 方法返回影响数据的条数,没修改任何数据字段返回 0 自增或自减一个字段的值 setInc/setDec 如不加第二个参数,默认值为1 // score 字段加 1 Db::table('think_user') ->where('id', 1) ->setInc('score'); // score 字段加 5 Db::table('think_user') ->where('id', 1) ->setInc('score', 5); // score 字段减 1 Db::table('think_user') ->where('id', 1) ->setDec('score'); // score 字段减 5 Db::table('think_user') ->where('id', 1) ->setDec('score', 5); 延迟更新 setInc/setDec支持延时更新,如果需要延时更新则传入第三个参数 下例中延时10秒,给score字段增加1 Db::table('think_user')->where('id', 1)->setInc('score', 1, 10); setInc/setDec 方法返回影响数据的条数
四,删除。
删除数据表中的数据 // 根据主键删除 Db::table('think_user')->delete(1); Db::table('think_user')->delete([1,2,3]); // 条件删除 Db::table('think_user')->where('id',1)->delete(); Db::table('think_user')->where('id','<',10)->delete(); delete 方法返回影响数据的条数,没有删除返回 0
———分页查询和排序———
$result = Db::name('ad')->where('state=1')->order('id desc')->limit('2,1')->select(); echo (json($result)->getContent());