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']);
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']);
peut utiliser plusieurs connexions à la base de données, en utilisant
Db::connect($config)->query('select * from think_user where id=:id',['id'=>8]);
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();
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();
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();
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();
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();
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);
ou utilisez directement la requête de fonction de fermeture, par exemple :
Db::select(function($query){ $query->table('think_user')->where('status',1); });
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');
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');
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');
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) { // } });
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();
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);
Db::name('user')->insert($data);
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();
或者直接使用 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();
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!