fonctionnement de la base de données des notes d'étude thinkphp5.0

巴扎黑
Libérer: 2023-03-11 06:02:02
original
1952 Les gens l'ont consulté

ThinkPHP dispose d'une couche d'accès à la base de données abstraite intégrée qui encapsule différentes opérations de base de données. Nous avons uniquement besoin d'utiliser la classe Db publique pour fonctionner sans écrire de codes différents et d'implémentations sous-jacentes pour différentes bases de données. le pilote de base de données correspondant pour le traitement. Utilisant la méthode PDO, il inclut actuellement la prise en charge de Mysql, SqlServer, PgSQL, Sqlite et d'autres bases de données.

1. Utilisation de base

Après avoir configuré les informations de connexion à la base de données, nous pouvons directement utiliser la base de données pour exécuter des opérations SQL natives, prendre en chargequery (opération de requête) et execute (opération d'écriture), et prend en charge la liaison de paramètres.

public function read()
{$sql = Db::query('select * from news');
    dump($sql);   
    
}
Copier après la connexion

Le résultat est :

méthode d'exécution :

public function read()
{$sql = Db::execute('insert into news (nid, rid) values (11, 11)');;
    dump($sql);
}
Copier après la connexion

Sortie :

Base de données ajoutée avec succès !

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

public function read()
{$sql = Db::query('select * from news where nid=:nid',['nid'=>1]);
    dump($sql);
}
Copier après la connexion

Sortie :

méthode d'exécution :

public function read()
{$sql = Db::execute('insert into news (nid, rid) values (:nid, :rid)',['nid'=>18,'rid'=>'121']);
    dump($sql);
}
Copier après la connexion

Sortie :

La base de données a été ajoutée avec succès

peut être utilisée plusieurs fois ! connexions à la base de données :

2. Constructeur de requête

Comme son nom l'indique, il est très prétentieux...

Regardons d'abord la requête de base

Interroger une donnée :

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

find = Interroger un élément ; et le résultat de la requête n'existe pas, renvoyer null

Sortie :

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

Cette instruction de requête est la même que celle ci-dessus, mais le résultat de la requête de la méthode select n'existe pas et renvoie un tableau vide

Eh bien, cette chose s'appelle un ensemble de données de requête, c'est vrai !

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

Et si vous souhaitez interroger la valeur d'un champ  ?

public function read()
{// 返回某个字段的值$sql =Db::table('news')->where('nid',18)->value('rid');
    dump($sql);
}
Copier après la connexion

这样看输出,我求rid的值:

 

如果你需要处理成千上百条数据库记录,可以考虑使用chunk方法,该方法一次获取结果集的一小块,然后填充每一小块数据到要处理的闭包,该方法在编写处理大量数据库记录的时候非常有用。

public function read()
{$sql =Db::table('news')->chunk(1,function($user){foreach($user as $u)
        {
dump($u);
        }
    });
    

}
Copier après la connexion

这个样子  就可以一条一条都给遍历出来了!

是“一条一条·”,嘿!

 

3.添加数据跟删除数据

使用 Db 类的 insert 方法向数据库提交数据

public function read()
{$data = ['ntitle' => '123', 'rid' => '456'];$sql = Db::table('news')->insert($data);
    
dump($sql);
}
Copier après la connexion

添加成功后insert 方法返回添加成功的条数,insert 正常情况返回 1

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

public function read()
{$data = ['ntitle' => '123', 'rid' => '345'];$sql = Db::table('news')->insert($data);$userId = Db::name('news')->getLastInsID('nid');
dump($userId);
dump($sql);
}
Copier après la connexion

看输出:

主键字段22!

 

 添加多条数据:

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

public function read()
{$data = [
['ntitle' =>'gaga','rid' => '12'],['ntitle' =>'gaaaga','rid' => '123']
];$sql = Db::table('news')->insertAll($data);

dump($sql);
}
Copier après la connexion

这样的话,返回的应该是两条2

删除数据:

根据主键来删除

public function read()
{//    根据主键 来删$sql = Db::table('news')->delete(1);//多删
//$sql = Db::table('news')->delete(1,2,3);dump($sql);
}
Copier après la connexion

执行成功返回影响行数;

还有一种是根据条件来删除

public function read()
{//    根据条件 来删$sql = Db::table('news')->where('nid',18)->delete();//多删
//$sql = Db::table('news')->where('nid','<&#39;,1)->delete();dump($sql);
}
Copier après la connexion

执行成功也是返回影响行数;

4.查询方法:

where方法:

可以使用where方法进行AND条件查询:

public function read()
{$sql = Db::table('news')->where('nid',20)->where('ntitle',123)->find();
dump($sql);
}
Copier après la connexion

whereOr方法:

使用whereOr方法进行OR查询:

public function read()
{$sql = Db::table('news')->where('nid',20)->whereOr('ntitle','like','%123%')->find();
dump($sql);
}
Copier après la connexion

混合查询:

where方法和whereOr方法在复杂的查询条件中经常需要配合一起混合使用

public function read()
{$sql = Db::table('news')->where(function($query){$query->where('nid',21)->where('nid',22);
})->whereOr(function($query)
{$query->where('ntitle','123')->whereOr('ntitle','123');
})->select();
dump($sql);
}
Copier après la connexion

输出的是:

看一下生成的代码:

SELECT * FROM `news` WHERE  (  `nid` = 1 OR `nid` = 2 ) OR (  `ntitle` LIKE '123' OR `ntitle` LIKE '123' )
Copier après la connexion

第一个查询方法用where或者whereOr是没有区别的。

 

查询接五

 

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:php.cn
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