数据库配置
在public目录下的index.php文件中添加
设置配置文件目录
define('CONF_PATH',__DIR__ . '/../conf/');
然后在public同级目录新建一个conf文件夹,在其中新建一个名为database.php的文件。然后添加以下代码,根据注释在对应位置填入一些必要的信息如数据库名、用户名、密码等。
//设置配置文件目录
<?php
use think\Env;
return [
// 数据库类型
'type' => 'mysql',
// 数据库连接DSN配置
'dsn' => '',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'test',
// 数据库用户名
'username' => 'root',
// 数据库密码
'password' => '2333',
// 数据库连接端口
'hostport' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => '',
// 数据库调试模式
'debug' => false,
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => true,
// 数据集返回类型
'resultset_type' => 'array',
// 自动写入时间戳字段
'auto_timestamp' => false,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 是否需要进行SQL性能分析
'sql_explain' => false,
// Builder类
'builder' => '',
// Query类
'query' => '\\think\\db\\Query',
];
然后在app/index/controller/index.php中使用以下代码,打开浏览器运行之后如果看到配置的用户信息,就算配置成功了,除此之外还有其他配置方法,有兴趣自行寻找。
<?php
namespace app\index\controller;
use think\Controller;
use think\View;
use think\Db;
class Index extends Controller{
public function index(){
$res = DB::connect();
dump($res);
}
}
查询数据库
第一种,使用sql方式查询
"?"为占位符,后面[]里数组的值将依次填入"?"处。
$cc = DB::query('select * from imooc_user where id = ?',[2]);
第二种,DB:table()->select()
这个操作将取出表中所有数据。也可在语句里加入条件来取出符合条件的数据
$cc = DB::table('imooc_user')->select();
这个操作将取出表中所有name=heber的数据,结果不存在,返回空数组
$cc = DB::table('imooc_user')->where([
'name' => 'heber'
])->select();
还可以使用field()来固定取出某些字段
$cc = DB::table('imooc_user')
->where([
'name' => 'heber'
])
->field('name')
->select();
第三种,DB:table()->find()
这个操作将取出表中第一条数据。也可在语句里加入条件来取出符合条件的数据
$cc = DB::table('imooc_user')->find();
这个操作将取出表中所有name=heber的数据,结果不存在,返回空数组
$cc = DB::table('imooc_user')->where([
'name' => 'heber'
])->find();
第四种,使用DB::table()->value()方式查询,也可加where()
这个操作将取出表中第一条数据的某个字段
$cc = DB::table()->value('name');
第五种,使用DB::table()->column()方式查询,也可加where()
这个操作将取出表中字段为name的那一列数据
$cc = DB::table('imooc_user')->column('name');
如果有第二个参数,则会把第二个参数作为下标,输出格式如[id]=>'name'
$cc = DB::table('imooc_user')->column('name','id');
还可以使用DB::name()来替代DB::table(),且DB::name可以直接使用去掉前缀的表名,如DB::name(‘user’)->select();其他用法与DB:table()一致。
插入数据库
第一种,DB::name()->insert([])它的返回值是影响的行数,这次我们使用DB::name(),且令$db=DB::name()来减少代码重复
$db = DB::name('user');
$db->insert([
'name' => 'cici'
]);
$cc = $db->select();
dump($cc);
第二种,DB::name()->insertGetId([])它的返回值是插入行的id。
$db = DB::name('user');
$cc = $db->insertGetId([
'name' => 'cici'
]);
dump($cc);
第三种,DB::name()->insertAll([])它的返回值是插入了多少行的总行数。
$db = DB::name('user');
for($i=0;$i<10;$i++){
$data[] = [
'name' => "heber_{$i}"
]
}
$cc = $db->insertAll($data);
dump($cc);
更新数据库
第一种,$db->where()->update(),一次可更新多个字段。更新函数必须带有条件。它的返回值是影响的行数。
$db = DB::name('user');
$cc = $db->where(['id'=>'7'])->update([
'name' => 'heber_clear'
]);
dump($cc);
第二种,$db->where()->setField(),一次只能更新一个字段。更新函数必须带有条件。它的返回值是影响的行数。
$db = DB::name('user');
$cc = $db->where(['id'=>'7'])->setField('name','twice');
dump($cc);
第三种,$db->where()->setInc(),针对数字类型字段,第二个参数用来设置每次增长多少,第二个参数为空时默认为1.
$db = DB::name('user');
$cc = $db->where(['id'=>'7'])->setInc('num',5);
dump($cc);
第四种,$db->where()->setDec(),针对数字类型字段,与setInc相反,第二个参数用来设置每次减少多少,第二个参数为空时默认为1.
$db = DB::name('user');
$cc = $db->where(['id'=>'7'])->setDec('num',5);
dump($cc);
删除数据库
第一种,$db->where()->delete(),删除数据库的某条值,通常会带上条件
$db = DB::name('user');
$cc = $db->where(['id'=>'7'])->delete();
dump($cc);
第二种,如果是根据主键来删除数据,则可直接将主键的值填入delete()中,如果要删除全部数据,则在delete()中填入’true’。
$db = DB::name('user');
$cc = $db->delete(8);
dump($cc);
条件构造器
条件构造器,其实就是讲述如何写出正确的条件,为了方便查看,我们在where()后面加上buildSql()。首先,我们看一下where中的条件对应关系。 EQ = NEQ <> LT < ELT <= GT > EGT >= BETWEEN BETWEEN a AND b NOTBETWEEN NOTBETWEEN a AND b IN IN (a,b) NOTIN NOT IN (a,b)
$db = DB::name('user');
//SELECT * FROM `imooc_user` WHERE `id` = 1
$db->where("id","EQ","1")->buildSql();
//SELECT * FROM `imooc_user` WHERE `id` BETWEEN 1 AND 5
$cc = $db->where("id","BETWEEN",[1,5])->buildSql();
//SELECT * FROM `imooc_user` WHERE `id` IN (1,2,3)
$cc = $db->where("id","IN",[1,2,3])->buildSql();
dump($cc);
或者我们之前有用到过的,这个可用来实现wHERE AND
$db = DB::name('user');
//SELECT * FROM `imooc_user` WHERE `id` <> 1 AND `name` = 'heber'
$cc = $db->where([
'id' => ['NEQ','1'],
'name' => 'heber'
])->buildSql();
如果自带的条件无法满足使用需求,则使用自定义条件
$db = DB::name('user');
//SELECT * FROM `imooc_user` WHERE ( `id` not in (1,2,3) )
$cc = $db->where('id',"EXP","not in (1,2,3)")->buildSql();
若我们想实现WHERE OR 操作,则如下
$db = DB::name('user');
//SELECT * FROM `imooc_user` WHERE ( `id` not in (1,2,3) ) OR `name` = 'heber' OR `num` = 1
$cc = $db->where('id',"EXP","not in (1,2,3)")
->whereOr('name','heber')
->whereOr('num','1')
->buildSql();
链式操作
即将一系列条件链接起来的操作
$db = DB::name('user');
$cc = $db
->where('id','gt','1')
->field('name')
->order('id DESC')
->limit(3)
->select();
dump($cc);
还有group()以及page()之类的方法,自行查询。