原生数据库查询

新建数据库: 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);
 }   

}
运行结果

知识总结

  1. 原生查询的读操作:query()   
  2. 原生查询中的写操作:insert/update/delete,execute()
  3. 查询构造器 : table():设置数据表 、 field():设置查询字段列表 、 find():返回满足条件的第一条记录,单条记录
  4. select():返回满足条件的多条记录
  5. where():设置查询条件,字符串,表达式,数组 
  6. 输出sql语句:fetchSql():true,false
  7. 排序分页 order(),limit()

发表评论

邮箱地址不会被公开。