ホームページ > PHPフレームワーク > ThinkPHP > ThinkPHP データベース操作: 追加、削除、変更、クエリ

ThinkPHP データベース操作: 追加、削除、変更、クエリ

藏色散人
リリース: 2021-01-26 09:10:13
転載
3266 人が閲覧しました

次のチュートリアル コラムでは、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 を使用して複数のデータベース接続を使用できます。config は別個のデータベース構成であり、配列と文字列をサポートしています。データベース接続の構成パラメータ名にすることもできます。

#クエリ データ

##基本クエリ

#データをクエリするには、次を使用します。

// table方法必须指定完整的数据表名
Db::table('think_user')->where('id',1)->find();
ログイン後にコピー
Find メソッドのクエリ結果が存在しないため、null を返します

データをクエリするにはset, use:

Db::table('think_user')->where('status',1)->select();
ログイン後にコピー
select メソッドのクエリ結果が存在せず、空の配列を返す

データ テーブル プレフィックス パラメータが設定されている場合

Db::name('user')->where('id',1)->find();
Db::name('user')->where('status',1)->select();
ログイン後にコピー
データ テーブルでテーブル プレフィックス関数が使用されていない場合、name メソッドと table メソッドは同じ効果があります。

すべてのチェーン操作メソッドは、検索メソッドと選択メソッドの前に使用できます。

デフォルトでは、find メソッドと select メソッドは配列を返します。

アシスタント機能

システムはデータベースアシスタント機能を提供します。便利なクエリ:

db('user')->where('id',1)->find();
db('user')->where('status',1)->select();
ログイン後にコピー
注: db アシスタント機能を使用すると、デフォルトで毎回データベースに再接続されますが、Db::name メソッドまたは Db::table メソッドの使用はシングルトンです。 db 関数が同じリンクを使用する必要がある場合は、3 番目のパラメータを渡すことができます。例:

db('user',[],false)->where('id',1)->find();
db('user',[],false)->where('status',1)->select();
ログイン後にコピー
上記のメソッドは同じデータベース接続を使用し、2 番目のパラメータは次のようになります。データベース接続パラメータを空白のままにすると、データベース構成ファイルの構成が使用されます。

#クエリ オブジェクトまたはクロージャを使用してクエリを実行します

#クエリ オブジェクトを使用してクエリを実行します。例:

$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);
});
ログイン後にコピー

値と列のクエリ

特定のフィールドの値をクエリするには、

// 返回某个字段的值
Db::table('think_user')->where('id',1)->value('name');
ログイン後にコピー
value メソッドを使用して、結果が存在しない場合に結果をクエリします。

Query 特定の列の値は、

// 返回数组
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();
ログイン後にコピー

データの追加

データの追加

Db クラスの insert メソッドを使用してデータベースにデータを送信します

$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::table('think_user')->insert($data);
ログイン後にコピー
database.php 構成ファイルでデータベースの接頭辞 (プレフィックス) を構成すると、名前を直接使用できます。 Data を送信する Db クラスのメソッド
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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート