【1】连接数据库
1.1连接数据库
- 全局配置:
config/datebase.php
- 动态配置:
Db::connect(['type' => 'mysql', ...])
//仅该次访问生效 - DSN连接:数据库类型://用户名:密码@数据库地址:端口号/数据库名称#字符集
$dsn='mysql://root:root$127.0.0.1:3306/student#utf8';
Db::connect($dsn)
【2】操作数据库
2.1 原生sql:
查:Db::query(sql语句);
写:Db::execute(sql语句);
2.2构造器
<?php
namespace app\db\controller;
use think\Db;
class Data
{
/**
* find
* 单条查询 返回符合条件的第一条记录(否则null ) return 一维数组
* filed
* 查询返回指定的字段,没有就等同*,
* 可通过数组方式添加别名:field(['sid'=>'编号','sname'=>'姓名','gender'=>'性别']) return 别名为下标的数组
* 别名遇到的问题:
* 页面错误或者不支持‘编号‘等中文表达式
* 解决:
* 1表达式修改为数据库支持格式:(['sid as 编号,sname as 姓名'])
* 2在\thinkphp\library\think\db\builder\Mysql.php中
* 搜索 $strict && !preg_match('/^[\w\.\*]+$/' 替换为 $strict && !preg_match('/^[\w\.\*\x7f-\xff]+$/'
* 让正则验证支持中文
* where:
* 单个条件使用表达式
* 多个条件使用数组
* where表达式 可放入find中,主键为默认查询,可省略 find(1)
*
*/
function find()
{
$re = Db::table('student')
//->field('sid,sname,gender')
->field(['sid' => '编号', 'sname' => '姓名', 'gender' => '性别'])
->where('sid', '=', 1)//‘=’可省略,其他不可
->find();
if (is_null($re)) {
return '为空';
} else {
dump($re);
}
}
/**
* select
* 多条查询 return 二维数组 没有就返回空数组
*/
function select()
{
$re = Db::table('student')
// ->field('sid,sname,gender,class_id')
->where([
'gender' => '男',
'class_id' => 4
])->select();
if (empty($re)) {
return '没有满足条件的';
} else {
// foreach ($re as $k) {
// dump($k);
// }
dump($re);
}
}
/**
* insert
* 单条插入 成功返回新增的数量,否则false
*/
function insert()
{
$insSql = [
'sname' => '武则天',
'gender' => '女',
'class_id' => '6'
];
//Db::table('student')->insert($insSql);
//以下仅mysql支持
//Db::table('student')->insert($insSql,true);//替换的方式新增
//Db::table('student')->data($insSql)->insert();//对数据进行包装,提高安全性
return Db::table('student')->insertGetId($insSql);//返回新增主键id 同时插入返回
}
/**
* insertAll
* 多条插入
*/
function insertAll()
{
$insAllSql = [
['sname' => '安其拉', 'gender' => '女', 'class_id' => '2'],
['sname' => '妲己', 'gender' => '女', 'class_id' => '1'],
['sname' => '露娜', 'gender' => '女', 'class_id' => '5']
];
return Db::table('student')->insertAll($insAllSql);//返回插入的条数
}
/**
* update
* 更新
*/
function update()
{
// return Db::table('student') //返回更新条数
// ->where('sid','24')
// ->update(['sname'=>'女娲']);
//如果条件为主键,可以写到update中:
Db::table('student')
->update(['sname' => '女娲', 'id' => 24]);
}
/**
* delete
* 删除
*/
function delete()
{
// return Db::table('student')//返回删除条数
// ->where('id','21')
// ->delete();
//where可以放到delete中
Db::table('student')
->delete(21);
}
}
2.3 使用模型
2.3.1创建数据表对应的模型
<?php
namespace app\db\model;
use think\Model;
/**
* 自定义的student表的模型类
* 继承模型类
*/
class Student extends Model
{
}
2.3.2 通过该模型操作数据表
<?php
namespace app\db\controller;
use app\db\model\Student;
use think\Db;
/**
* 模型和一个数据表绑定,并且同名
* 引入自定义模型
* 操作数据表时直接通过模型不用再去选择表了,返回一个对象
*/
class Stu
{
function get()
{
//Student:: 等价于 $Db::table('student')
//获取id为1
// dump(Student::get(1));
//使用查询构造器创建复杂的查询
// $re = Student::field('sid,sname')
// ->where('sid','1')
// ->find();
//获取所有数据
// $re = Student::all();
//获取两条数据
// $re = Student::all([1,2]);
//使用构造器
$re = Student::field('sid,sname')
->where('sid', 'in', '2,3') //返回第二条和第三条
->select();
//删除
//Student::delete()...
//修改
//新增加入条件即可
//新增
//Student::save()...
dump($re);
}
}