ThinkPHP 데이터베이스 작업: 추가, 삭제, 수정 및 쿼리

藏色散人
풀어 주다: 2021-01-26 09:10:13
앞으로
3205명이 탐색했습니다.

다음 튜토리얼 칼럼인 thinkphp에서는 ThinkPHP 데이터베이스 작업의 추가, 삭제, 수정, 검색 방법을 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!

기본 사용

데이터베이스를 직접 사용하여 기본 SQL 작업을 실행하고 쿼리(쿼리 작업) 및 실행(쓰기 작업) 메서드를 지원하며 매개변수 바인딩을 지원할 수 있습니다.

Db::query('select * from think_user where id=?',[8]);
Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']);
로그인 후 복사

는 명명된 자리 표시자 바인딩도 지원합니다. 예:

Db::query('select * from think_user where id=:id',['id'=>8]);
Db::execute('insert into think_user (id, name) values (:id, :name)',['id'=>8,'name'=>'thinkphp']);
로그인 후 복사

는 여러 데이터베이스 연결을 사용할 수 있습니다.

Db::connect($config)->query('select * from think_user where id=:id',['id'=>8]);
로그인 후 복사

config는 별도의 데이터베이스 구성이고 배열과 문자열을 지원하거나 데이터베이스 연결 매개변수 이름의 구성일 수 있습니다.

Query data

기본 쿼리

데이터를 쿼리하려면 다음을 사용하세요.

// table方法必须指定完整的数据表名
Db::table('think_user')->where('id',1)->find();
로그인 후 복사

 find 메소드 쿼리 결과가 존재하지 않으면 null을 반환하세요

데이터세트 사용량 쿼리:

Db::table('think_user')->where('status',1)->select();
로그인 후 복사

 select 메소드 쿼리 결과가 존재하지 않고 빈 배열을 반환합니다.

데이터 테이블 접두사 매개변수가 설정된 경우

Db::name('user')->where('id',1)->find();
Db::name('user')->where('status',1)->select();
로그인 후 복사

를 사용할 수 있습니다. 데이터 테이블이 테이블 접두사 기능을 사용하지 않는 경우 , 이름 및 테이블 메서드는 동일한 효과입니다.

찾기 및 선택 방법 이전에 모든 체인 작업 방법을 사용할 수 있습니다.

기본적으로 찾기 및 선택 메서드는 배열을 반환합니다.

보조 기능

시스템은 보다 편리한 쿼리를 위해 db 보조 기능을 제공합니다.

db('user')->where('id',1)->find();
db('user')->where('status',1)->select();
로그인 후 복사

참고: db 보조 기능을 사용하면 기본적으로 매번 데이터베이스에 다시 연결됩니다. Db ::name 또는 Db::table 메소드는 싱글톤입니다. db 함수가 동일한 링크를 사용해야 하는 경우 세 번째 매개변수를 전달할 수 있습니다. 예:

db('user',[],false)->where('id',1)->find();
db('user',[],false)->where('status',1)->select();
로그인 후 복사

  위 방법에서는 동일한 데이터베이스 연결을 사용합니다. 두 번째 매개변수는 데이터베이스의 연결 매개변수로 둡니다. 데이터베이스 구성을 사용하려면 공백입니다.

쿼리 개체 또는 클로저를 사용하여 쿼리

또는 쿼리 개체를 사용하여 쿼리(예:

$query = new \think\db\Query();$query->table('think_user')->where('status',1);
Db::find($query);
Db::select($query);
로그인 후 복사

)하거나 클로저 함수를 직접 사용하여 쿼리(예:

Db::select(function($query){
  $query->table('think_user')->where('status',1);
});
로그인 후 복사

) value sum 열 쿼리

특정 필드의 값을 쿼리하려면

// 返回某个字段的值
Db::table('think_user')->where('id',1)->value('name');
로그인 후 복사

  Value 메서드를 사용하여 결과가 존재하지 않고 null을 반환하도록 쿼리할 수 있습니다.

특정 열의 경우

// 返回数组
Db::table('think_user')->where('status',1)->column('name');
// 指定索引
Db::table('think_user')->where('status',1)->column('name','id');
로그인 후 복사

 column 메소드를 사용하여 결과가 존재하지 않는 것을 쿼리하고 빈 배열을 반환할 수 있습니다.

데이터 세트 일괄 처리

수천 또는 수백 개의 데이터베이스 레코드를 처리해야 하는 경우 한 번에 결과 집합의 작은 조각을 가져온 다음 각 작은 데이터 조각을 처리할 클로저에 채우는 청크 방법 사용을 고려할 수 있습니다. 이 방법은 많은 수의 데이터베이스를 처리하기 위해 쓸 때 매우 유용합니다. 기록.

예를 들어 모든 사용자 테이블 데이터를 일괄 처리하여 매번 100개의 사용자 레코드를 처리할 수 있습니다.

Db::table('think_user')->chunk(100, function($users) {    foreach ($users as $user) {        
//查询数据    
}
});// 或者交给回调方法
myUserIterator处理
Db::table('think_user')->chunk(100, 'myUserIterator');
로그인 후 복사

클로저 함수에서 false를 반환하여 데이터 세트 처리를 중지할 수 있습니다.

Db::table('think_user')->chunk(100, function($users) {    
// 处理结果集...
    return false;
});
로그인 후 복사

다른 쿼리 메서드 호출에서도 지원됩니다. 청크 메서드 앞에 예를 들면 다음과 같습니다.

Db::table('think_user')->where('score','>',80)->chunk(100,function($users) {    foreach ($users as $user) {    
//    
}
});
로그인 후 복사

JSON 유형 데이터 쿼리(mysql V5.0.1)

// 查询JSON类型字段 (info字段为json类型)
Db::table('think_user')->where('info$.email','thinkphp@qq.com')->find();
로그인 후 복사

Add data

데이터 조각 추가

사용 Db 클래스의 insert 메소드는 데이터베이스에 데이터를 제출합니다

$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::table('think_user')->insert($data);
로그인 후 복사
database.php 구성 파일에서 데이터베이스 접두사(prefix)를 구성하면 Db 클래스의 name 메소드를 직접 사용하여 데이터를 제출할 수 있습니다

Db::name('user')->insert($data);
로그인 후 복사
 

insert 메소드 데이터를 성공적으로 추가하면 성공적으로 추가된 항목 수를 반환합니다. Insert는 일반적으로 1을 반환합니다.

添加数据后如果需要返回新增数据的自增主键,可以使用 getLastInsID 方法:

Db::name('user')->insert($data);$userId = Db::name('user')->getLastInsID();
로그인 후 복사

或者直接使用 insertGetId 方法新增数据并返回主键值:

Db::name('user')->insertGetId($data);
로그인 후 복사

  insertGetId 方法添加数据成功返回添加数据的自增主键

添加多条数据

添加多条数据直接向 Db 类的 insertAll 方法传入需要添加的数据即可

$data = [
  ['foo' => 'bar', 'bar' => 'foo'],  ['foo' => 'bar1', 'bar' => 'foo1'],  ['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data);
로그인 후 복사

  insertAll 方法添加数据成功返回添加成功的条数

助手函数

// 添加单条数据
db('user')->insert($data);
// 添加多条数据
db('user')->insertAll($list);
로그인 후 복사

快捷更新

V5.0.5+ 以上版本封装的快捷更新方法 data ,可以配合 insert 使用。

下面举个例子说明用法:

Db::table('data')->data(['name'=>'tp','score'=>1000])->insert();
로그인 후 복사

更新数据

更新数据表中的数据

Db::table('think_user')->where('id', 1)->update(['name' => 'thinkphp']);
로그인 후 복사

如果数据中包含主键,可以直接使用:

Db::table('think_user')->update(['name' => 'thinkphp','id'=>1]);
로그인 후 복사

  update 方法返回影响数据的条数,没修改任何数据返回 0

如果要更新的数据需要使用 SQL 函数或者其它字段,可以使用下面的方式:

Db::table('think_user')->where('id', 1)->update([    'login_time' => ['exp','now()'],
    'login_times' => ['exp','login_times+1'],]);
로그인 후 복사

更新某个字段的值

Db::table('think_user')    ->where('id',1)    ->setField('name', 'thinkphp');
로그인 후 복사

  setField 方法返回影响数据的条数,没修改任何数据字段返回 0

自增或自减一个字段的值

setInc/setDec 如不加第二个参数,默认值为1

// score 字段加 1
Db::table('think_user')    ->where('id', 1)    ->setInc('score');
// score 字段加 5
Db::table('think_user')    ->where('id', 1)    ->setInc('score', 5);
// score 字段减 1
Db::table('think_user')    ->where('id', 1)    ->setDec('score');
// score 字段减 5
Db::table('think_user')    ->where('id', 1)    ->setDec('score', 5);
로그인 후 복사

延迟更新

setInc/setDec 支持延时更新,如果需要延时更新则传入第三个参数

下例中延时10秒,给 score 字段增加1

Db::table('think_user')->where('id', 1)->setInc('score', 1, 10);
로그인 후 복사

  setInc/setDec 方法返回影响数据的条数

助手函数

// 更新数据表中的数据
db('user')->where('id',1)->update(['name' => 'thinkphp']);
// 更新某个字段的值
db('user')->where('id',1)->setField('name','thinkphp');
// 自增 score 字段
db('user')->where('id', 1)->setInc('score');
// 自减 score 字段
db('user')->where('id', 1)->setDec('score');
로그인 후 복사

快捷更新( V5.0.5+ )

V5.0.5+ 以上版本封装的 data 、 inc 、 dec 和 exp 方法属于链式操作方法,可以配合 update 使 用。

下面举个例子说明用法:

Db::table('data')->where('id',1)->inc('read')->dec('score',3)->exp('name','UPPER(name)')->update();
로그인 후 복사

删除数据

删除数据表中的数据

// 根据主键删除
Db::table('think_user')->delete(1);
Db::table('think_user')->delete([1,2,3]);
// 条件删除
Db::table('think_user')->where('id',1)->delete();
Db::table('think_user')->where('id','<&#39;,10)->delete();
로그인 후 복사

  delete 方法返回影响数据的条数,没有删除返回 0

助手函数

// 根据主键删除
db('user')->delete(1);
// 条件删除
db('user')->where('id',1)->delete();
로그인 후 복사

 

위 내용은 ThinkPHP 데이터베이스 작업: 추가, 삭제, 수정 및 쿼리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:cnblogs.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿