Maison >cadre php >YII >Il existe plusieurs façons de se connecter à la base de données dans yii

Il existe plusieurs façons de se connecter à la base de données dans yii

(*-*)浩
(*-*)浩original
2019-12-04 13:18:212895parcourir

Il existe plusieurs façons de se connecter à la base de données dans yii

Méthode PDO (adaptée aux requêtes de connexion multi-tables).                                                                                                                                                                                                                                                             (1)Nouveau

$sql = "";//原生态sql语句 
xx::model()->dbConnection->createCommand($sql)->execute();  非select语句(update、insert、delete)
xx::model()->dbConnection->createCommand($sql)->queryRow(); 查询select一条记录
xx::model()->dbConnection->createCommand($sql)->queryAll(); 查询select多条记录

$sql = "select a.*, count(b.role_id)as num from {{user_role}} a left join {{user}} b on a.id = b.role_id group by b.role_id order by a.id";
$user_role_info = UserRole::model()->dbConnection->createCommand($sql)->queryAll(); 
$this->render("list", array('user_role_info'=>$user_role_info));

Méthode de critères

Vous pouvez également utiliser $condition pour spécifier des conditions de requête plus complexes. Au lieu d'utiliser des chaînes, nous pouvons faire de $condition une instance de CDbCriteria, ce qui nous permet de spécifier des conditions qui ne se limitent pas à WHERE.

$sql = "select a.*, count(b.role_id)as num from slgo_user_role a left join slgo_user b on a.id = b.role_id group by b.role_id order by a.id";
$user_role_info = UserRole::model()->dbConnection->createCommand($sql)->queryAll(); 
$this->render("list", array('user_role_info'=>$user_role_info));

Une alternative à CDbCriteria consiste à transmettre un tableau à la méthode find. Les clés et valeurs du tableau correspondent respectivement aux noms d'attributs et aux valeurs du critère

L'exemple ci-dessus peut être réécrit comme suit :

$post=new Post; 
$post->title='sample post'; 
$post->content='post body content'; 
$post->save();

Lorsqu'une condition de requête consiste à appuyer sur Lorsque la valeur spécifiée correspond à plusieurs colonnes, nous pouvons utiliser findByAttributes(). Nous faisons du paramètre $attributes un tableau de valeurs indexées par noms de colonnes. Dans certains frameworks, cette tâche peut être réalisée en appelant une méthode comme findByNameAndTitle.

Bien que cette approche semble tentante, elle provoque souvent de la confusion, des conflits et des problèmes tels que la sensibilité à la casse des noms de colonnes.

Méthode Query Builder

$criteria=new CDbCriteria; 
$criteria->select='title';  // 只选择 'title' 列 
$criteria->condition='postID=:postID'; 
$criteria->params=array(':postID'=>10); 
$post=Post::model()->find($criteria);
1 Lorsque vous faites bon usage d'ActiveRecord, c'est-à-dire ne le laissez pas générer une méthode de requête SQL de second ordre. , n'en faites pas trop. Faites attention à la différence de temps et de performances. Pour les requêtes Big Data, en termes d'espace mémoire, vous pouvez utiliser toArray() dans yii2 pour économiser la consommation de mémoire.

2. L'avantage d'ActiveRecord par rapport au PDO réside dans sa commodité.

La première est que, comparée à l'écriture d'instructions SQL, l'utilisation d'ActiveRecord est plus simple et, plus important encore, elle est moins sujette aux erreurs.

La seconde est qu'il offre de nombreuses commodités au-delà des instructions SQL, telles que le filtrage des paramètres, la liaison, etc. Vous rencontrerez toujours cela dans le développement Web. En écrivant une instruction SQL après l'autre, le degré de réutilisation du code n'est pas élevé et il est facile d'oublier de filtrer quelque part, ce qui entraîne des risques de sécurité.

3. Yii2 a déjà Query, qui est meilleur en termes de performances qu'ActiveRecord et peut être utilisé en remplacement. Bien entendu, la commodité et l’efficacité sont les deux faces de la médaille, et son utilisation n’est pas aussi pratique qu’ActiveRecord. Mais mon expérience dans le projet est que Query n'est utilisé que légèrement moins fréquemment qu'ActiveRecord. Personnellement, je pense que Query/ActiveQuery est une nouvelle fonctionnalité intéressante introduite dans Yii2.

4. Les articles précédents parlent des scénarios d'application d'ActiveRecord. Pour PDO, si vous souhaitez l'utiliser, cela devrait être pour des opérations SQL plus complexes, comme une ou deux phrases qui ne peuvent pas être écrites clairement.

Dans ce cas, utiliser ActiveRecord pour le construire n'est pas moins compliqué que d'écrire directement du SQL, vous pouvez donc envisager d'utiliser PDO. Mais à mon avis, si les instructions SQL utilisées dans le projet sont très complexes, elles seront écrites sous forme de vues DB ou de procédures stockées. Par conséquent, je pense que PDO n'est pas beaucoup utilisé, on peut dire que c'est très peu.

5. Si vous recherchez une efficacité plus élevée, je ne pense personnellement pas que le PDO devrait être trop utilisé, ce qui rend la maintenance ultérieure extrêmement difficile. Au lieu de cela, vous pouvez envisager d'optimiser les requêtes SQL, d'optimiser les index et les structures de tables, d'utiliser le cache, etc. Il convient de mentionner que l’utilisation du cache est la méthode la plus simple, la plus directe et la plus efficace.

6. Il n'est pas nécessaire de considérer les problèmes de performances prématurément

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!

Déclaration:
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