PHP:ThinkPHP5数据库操作增删改查-Db类

举报
彭世瑜 发表于 2021/08/14 00:30:02 2021/08/14
【摘要】 项目文件目录 project/ -app -conf 123 1、数据库配置 方式一 配置文件 conf/database.php <?php return [ 'type' => 'mysql', 'hostname' => '127.0.0.1', 'database' => 'root', 'username' => 'r...

项目文件目录

project/ -app -conf

  
 
  • 1
  • 2
  • 3

1、数据库配置

方式一 配置文件

conf/database.php

<?php

return [ 'type' => 'mysql', 'hostname' => '127.0.0.1', 'database' => 'root', 'username' => 'root', 'password' => '123456', 'hostport' => '3306', 'charset' => 'utf8'
];


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

方式二:控制函数

app\index\controller\Index.php

namespace app\index\controller;

use think\Db;


class Index
{ public function index() { $db = Db::connect([ 'type' => 'mysql', 'hostname' => '127.0.0.1', 'database' => 'root', 'username' => 'root', 'password' => '123456', 'hostport' => '3306', 'charset' => 'utf8' ]); dump($db); }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

方式三 DSN方式 Data Source Name

$db = Db::connect('mysql://root:123456@127.0.0.1:3306/demo#utf8');


  
 
  • 1
  • 2

方式四 从读取配置

conf/config.php

<?php

return [ 'db_config' => [ 'type' => 'mysql', 'hostname' => '127.0.0.1', 'database' => 'root', 'username' => 'root', 'password' => '123456', 'hostport' => '3306', 'charset' => 'utf8' ]
];


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

app\index\controller\Index.php

$db = Db::connect('db_config');

// 或者
use  think/Config;

$db = Db::connect(Config::get('db_config'));

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2、获取数据表对象

$bd = Db::table('pre_user')  # Db是单例模式
$bd = Db::name('user')  # 会自动添加前缀

# 助手函数 db 每次调用实例化false取消每次实例化
$bd = db('pre_user', [], false)  

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

3、查询数据

// 检查数据库配置
dump(config('database'));

// 使用sql语句查询
$res = Db::query("select * from student");
$res = Db::query("select * from student where id=?", [1]);

// 插入数据 返回影响条数
$res =Db::execute("insert into student set name=?, age=?", ['Tom',23]);

// select 返回所有记录 二维数组 []
$res = Db::table('student')->select();

// column 返回所有列记录 二维数组 NULL
# 如果存在第二个参数,为key值
$res = Db::table('student')->column('age', 'name');

// find 返回一条记录 一维数组 NULL
$res = Db::table('student')->find();

// value 返回一条记录中的某个字段 NULL
$res = Db::table('student')->value('name');


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

4、插入数据

$db = Db::table('student');

#insert 返回值是影响记录的行数,插入数
$res = $db->insert([ 'name' => 'Tom', 'age' => 23 ]);

#insetGetId 返回值插入数据的自增id
$res = $db->insertGetId([ 'name' => 'Tom', 'age' => 23 ]);

#insertAll 返回插入数据成功的行数
$data = [];
for ($i=0; $i<10; $i++)
{ $data[] = [ 'name' => "Tom{$i}", 'age' => 23 ];
};

$res = $db->insertAll($data);


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

5、更新数据

# update 更新多个字段 返回影响行数
$res = $db->where([ 'id'=>1 ])->update([ 'name'=> '王小二' ]);

# setField 更新一个字段 返回影响行数
$res = $db->where([ 'id' => 1 ])->setField('name', '王大锤');

# setInc 自增 返回影响行数
$res = $db->where([ 'id' => 1 ])->setInc('age');

# setDec 自减 返回影响行数
$res = $db->where([ 'id' => 1 ])->setDec('age');

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

6、删除数据

# 条件删除,返回影响行数
$res = $db->where( ['id'=>1] )->delete();

# 传入主键删除 返回影响行数
$res = $db->delete(2);

# 清空数据
$res = $db->where('1=1')->delete();


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

7、条件构造器

buildSql();返回SQL语句

where(‘字段名’,‘表达式’,‘查询条件’);

表达式 含义
EQ、= 等于(=)
NEQ、<> 不等于(<>)
GT、> 大于(>)
EGT、>= 大于等于(>=)
LT、< 小于(<)
ELT、<= 小于等于(<=)
LIKE 模糊查询
[NOT] BETWEEN (不在)区间查询
[NOT] IN (不在)IN 查询
[NOT] NULL 查询字段是否(不)是NULL
[NOT] EXISTS EXISTS查询
EXP 表达式查询,支持SQL语法
> time 时间比较
< time 时间比较
between time 时间比较
notbetween time 时间比较

示例

$db->where()->buildSql();

# 构造条件
$res = $db ->where('id', 'in', [1, 2, 3]) ->whereOr('id', '<', '4') ->buildSql();

// string(62) "( SELECT * FROM `student` WHERE  `id` IN (1,2,3) OR `id` < 4 )"


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

链式操作

$res = Db::table('user') ->where('id', '>', 10) ->field('name', 'id') ->order('id DESC') // ->limit(3, 5) // ->page(3, 5)  // limit((3-1)*5, 5) ->group('`group`') ->select();

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/88601446

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。