tp6 数据库与查询构造器
原生数据库查询
新建数据库: tp6
-- Adminer 4.7.1 MySQL dump
SET NAMES utf8;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
SET NAMES utf8mb4;
CREATE DATABASE `tp6` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
USE `tp6`;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL,
`age` tinyint(3) unsigned NOT NULL,
`email` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
`password` char(32) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `user` (`user_id`, `name`, `age`, `email`, `password`) VALUES
(1, '韦小宝', 25, 'weixiaobao@php.cn', 'e10adc3949ba59abbe56e057f20f883e'),
(2, '小龙女', 50, 'xiaolongnv@php.cn', 'e10adc3949ba59abbe56e057f20f883e'),
(3, '过儿', 19, 'guoer@php.cn', 'e10adc3949ba59abbe56e057f20f883e'),
(6, '欧阳克', 27, 'oyangke@php.cn', 'e10adc3949ba59abbe56e057f20f883e');
在项目 app\index\controller\DbTest 控制器类文件内容
<?php
namespace app\index\controller;
use think\facade\Db;
class DbTest{
//1.原生查询的读操作:query()
public function demo1(){
$sql = "SELECT `user_id`,`name`,`age` FROM `user` WHERE `age`>:age LIMIT :num";
//用数组传参数进行绑定
$map = ['age'=>25,'num'=>2];
//执行查询操作
$res = Db::query($sql,$map);
//打印数据
dump($res);
}
//2.原生查询中的写操作:insert/update/delete,execute()
public function demo2(){
$sql = "UPDATE `user` SET `age`=:age WHERE `user_id`=:user_id";
//用数组传参数进行绑定
$map = ['age'=>32,'user_id'=>2];
//执行更新操作
$res = Db::execute($sql,$map);
//打印数据
return '成功更新了'.$res.'条记录';
}
//3.查询构造器
//table():设置数据表
//field():设置查询字段列表
//find():返回满足条件的第一条记录,单条记录
public function demo3(){
$res = Db::table('user')
->field('user_id,name,age')
->find(); //支持将主键作为参数,默认输出满足条件的第一条记录find(),输出指定记录find(4)
dump($res);
}
//4.select():返回满足条件的多条记录
public function demo4(){
$res = Db::table('user')
->field('user_id,name,age')
->select([2,3,4]); //支持将主键作为参数,输出指定记录键select(3),输出所有记录select(3),输出多个键select([2,3,4])
dump($res);
}
//5.where():设置查询条件,字符串,表达式,数组
//fetchSql():true,false
public function demo5(){
$res = Db::table('user')
->field('user_id,name,age')
//输出年龄大于30的数据
//1. 字符串(查询条件) user_id = 3
// ->where('age > 30')
//2.表达式:(字段,操作符,值)
// ->where('age','>','30')
// ->where('user_id','=','2') //等于 ->where('user_id','2')
//区间,模糊查询
// ->where('age','between',[20,30])
//3.数组
//关联数组:等值查询,AND
// ->where(['user_id'=>2,'age'=>32])
//索引数组:批量查询
->where([
0 => ['age','between',[20,40]],
// 1=> ['age','>',30]
])
->fetchSql(false) //值是true 或 false
->select();
dump($res);
}
//6. order(),limit()
public function demo6(){
$res = Db::table('user')
->field('user_id,name,age')
// ->order('age desc') //asc 升序 desc降序
// ->order('age','desc') //按照年龄降序排列
//多字段排序,恋情数组参数
->order(['user_id'=>'asc','age'=>'desc'])
->limit(2) //limit(2,3) fen分页参数
->select();
dump($res);
}
}
知识总结
- 原生查询的读操作:query()
- 原生查询中的写操作:insert/update/delete,execute()
- 查询构造器 : table():设置数据表 、 field():设置查询字段列表 、 find():返回满足条件的第一条记录,单条记录
- select():返回满足条件的多条记录
- where():设置查询条件,字符串,表达式,数组
- 输出sql语句:fetchSql():true,false
- 排序分页 order(),limit()