다음 튜토리얼 칼럼인 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','<',10)->delete();
delete 方法返回影响数据的条数,没有删除返回 0
助手函数
// 根据主键删除 db('user')->delete(1); // 条件删除 db('user')->where('id',1)->delete();
위 내용은 ThinkPHP 데이터베이스 작업: 추가, 삭제, 수정 및 쿼리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!