Maison > cadre php > PensezPHP > le corps du texte

Opérations de base de données ThinkPHP : ajout, suppression, modification et requête

藏色散人
Libérer: 2021-01-26 09:10:13
avant
3175 Les gens l'ont consulté

La colonne tutorielle suivante de thinkphp vous présentera l'ajout, la suppression, la modification et l'interrogation des opérations de base de données ThinkPHP. J'espère qu'elle sera utile aux amis dans le besoin !

Utilisation de base

Vous pouvez utiliser directement la base de données pour exécuter des opérations SQL natives, prenant en charge la requête (opération de requête) et l'exécution (opération d'écriture) méthodes et prend en charge la liaison de paramètres.

Db::query('select * from think_user where id=?',[8]);
Db::execute('insert into think_user (id, name) values (?, ?)',[8,'thinkphp']);
Copier après la connexion

prend également en charge la liaison d'espace réservé nommé, par exemple :

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']);
Copier après la connexion

peut utiliser plusieurs connexions à la base de données, en utilisant

Db::connect($config)->query('select * from think_user where id=:id',['id'=>8]);
Copier après la connexion

config est une configuration de base de données distincte, prend en charge les tableaux et les chaînes, elle peut également être le nom du paramètre de configuration d'une connexion à la base de données.

Requête de données

Requête de base

Pour interroger une donnée, utilisez :

// table方法必须指定完整的数据表名
Db::table('think_user')->where('id',1)->find();
Copier après la connexion

Le résultat de la requête de la méthode find n'existe pas et renvoie null

Pour interroger un ensemble de données, utilisez :

Db::table('think_user')->where('status',1)->select();
Copier après la connexion

Le résultat de la requête de la méthode select n'existe pas et renvoie un tableau vide

Si le paramètre de préfixe de la table de données est défini, vous pouvez utiliser

Db::name('user')->where('id',1)->find();
Db::name('user')->where('status',1)->select();
Copier après la connexion

Si votre table de données n'utilise pas la fonction de préfixe de table, alors les méthodes name et table ont le même effet.

Toutes les méthodes de fonctionnement en chaîne peuvent être utilisées avant les méthodes de recherche et de sélection.

Par défaut, les méthodes find et select renvoient des tableaux.

Fonction Assistant

Le système fournit une fonction d'assistant de base de données, qui peut être plus Requête pratique :

db('user')->where('id',1)->find();
db('user')->where('status',1)->select();
Copier après la connexion

Remarque : L'utilisation de la fonction db assistant se reconnectera à la base de données à chaque fois par défaut, tandis que l'utilisation de la méthode Db::name ou Db::table est un singleton. Si la fonction db doit utiliser le même lien, vous pouvez passer le troisième paramètre, par exemple :

db('user',[],false)->where('id',1)->find();
db('user',[],false)->where('status',1)->select();
Copier après la connexion

 La méthode ci-dessus utilisera la même connexion à la base de données, et le deuxième paramètre est le paramètre de connexion à la base de données, le laisser vide signifie utiliser la configuration du fichier de configuration de la base de données.

Utilisez un objet de requête ou une fermeture pour interroger

ou utilisez un objet de requête pour interroger, Par exemple :

$query = new \think\db\Query();$query->table('think_user')->where('status',1);
Db::find($query);
Db::select($query);
Copier après la connexion

ou utilisez directement la requête de fonction de fermeture, par exemple :

Db::select(function($query){
  $query->table('think_user')->where('status',1);
});
Copier après la connexion

Requête de valeur et de colonne

Pour interroger la valeur d'un certain champ, vous pouvez utiliser la

// 返回某个字段的值
Db::table('think_user')->where('id',1)->value('name');
Copier après la connexion

 le résultat de la requête de la méthode de valeur n'existe pas, renvoie null

requête La valeur d'une certaine colonne peut être interrogée à l'aide de la méthode

// 返回数组
Db::table('think_user')->where('status',1)->column('name');
// 指定索引
Db::table('think_user')->where('status',1)->column('name','id');
Copier après la connexion

 Si le résultat de la requête n'existe pas, un tableau vide sera renvoyé <.>

L'ensemble de données est traité par lots

Si vous devez traiter des milliers ou des centaines d'enregistrements de base de données, vous pouvez envisager d'utiliser la méthode des morceaux, qui obtient une petite partie de l'ensemble de résultats à la fois, puis remplit chaque petite partie de données dans la fermeture à traiter, cette méthode est très utile lors de l'écriture pour traiter un grand nombre d'enregistrements de base de données.

Par exemple, nous pouvons traiter toutes les données de la table utilisateur par lots, en traitant 100 enregistrements utilisateur à chaque fois :

Db::table('think_user')->chunk(100, function($users) {    foreach ($users as $user) {        
//查询数据    
}
});// 或者交给回调方法
myUserIterator处理
Db::table('think_user')->chunk(100, 'myUserIterator');
Copier après la connexion
Vous pouvez abandonner le traitement de l'ensemble de données en renvoyant false à partir de la fonction de fermeture Traitement :

Db::table('think_user')->chunk(100, function($users) {    
// 处理结果集...
    return false;
});
Copier après la connexion
prend également en charge l'appel d'autres méthodes de requête avant la méthode chunk, par exemple :

Db::table('think_user')->where('score','>',80)->chunk(100,function($users) {    foreach ($users as $user) {    
//    
}
});
Copier après la connexion

Requête de données de type JSON (mysql V5.0.1)

// 查询JSON类型字段 (info字段为json类型)
Db::table('think_user')->where('info$.email','thinkphp@qq.com')->find();
Copier après la connexion

Ajouter des données

Ajouter une donnée

Utilisez la méthode d'insertion de la classe Db pour soumettre des données à la base de données

$data = ['foo' => 'bar', 'bar' => 'foo'];
Db::table('think_user')->insert($data);
Copier après la connexion
Si vous configurez le préfixe de la base de données (préfixe) dans le fichier de configuration database.php, vous pouvez directement utiliser le nom méthode de la classe Db pour soumettre des données

Db::name('user')->insert($data);
Copier après la connexion
 

La méthode d'insertion ajoute avec succès les données et renvoie le nombre d'éléments ajoutés avec succès. L'insertion renvoie normalement 1.

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

Db::name('user')->insert($data);$userId = Db::name('user')->getLastInsID();
Copier après la connexion

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

Db::name('user')->insertGetId($data);
Copier après la connexion

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

添加多条数据

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

$data = [
  ['foo' => 'bar', 'bar' => 'foo'],  ['foo' => 'bar1', 'bar' => 'foo1'],  ['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data);
Copier après la connexion

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

助手函数

// 添加单条数据
db('user')->insert($data);
// 添加多条数据
db('user')->insertAll($list);
Copier après la connexion

快捷更新

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

下面举个例子说明用法:

Db::table('data')->data(['name'=>'tp','score'=>1000])->insert();
Copier après la connexion

更新数据

更新数据表中的数据

Db::table('think_user')->where('id', 1)->update(['name' => 'thinkphp']);
Copier après la connexion

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

Db::table('think_user')->update(['name' => 'thinkphp','id'=>1]);
Copier après la connexion

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

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

Db::table('think_user')->where('id', 1)->update([    'login_time' => ['exp','now()'],
    'login_times' => ['exp','login_times+1'],]);
Copier après la connexion

更新某个字段的值

Db::table('think_user')    ->where('id',1)    ->setField('name', 'thinkphp');
Copier après la connexion

  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);
Copier après la connexion

延迟更新

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

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

Db::table('think_user')->where('id', 1)->setInc('score', 1, 10);
Copier après la connexion

  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');
Copier après la connexion

快捷更新( 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();
Copier après la connexion

删除数据

删除数据表中的数据

// 根据主键删除
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();
Copier après la connexion

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

助手函数

// 根据主键删除
db('user')->delete(1);
// 条件删除
db('user')->where('id',1)->delete();
Copier après la connexion

 

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!