Maison  >  Article  >  développement back-end  >  Instructions d'utilisation liées à la base de données Yii 11.17

Instructions d'utilisation liées à la base de données Yii 11.17

不言
不言original
2018-04-28 11:06:101229parcourir

Cet article présente les instructions de fonctionnement liées à la base de données Yii 11.17, qui a une certaine valeur de référence. Maintenant, je la partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

Exemple :

<.>
$result = array(
    &#39;id&#39;=>null,
    &#39;val&#39;=>0
);
$row1 = Yii::app()->db->createCommand()->insert(&#39;test1&#39;, $result);
$id   = Yii::app()->db->getLastInsertID();
$row2 = Yii::app()->db->createCommand()->update(&#39;test1&#39;, array(&#39;val&#39;=>$id) , &#39;id=:id&#39;,array(&#39;:id&#39;=>$id));
echo $id;
exit;
#1. Pour établir une connexion à la base de données, vous pouvez utiliser try...catch pour intercepter les exceptions qui peuvent être générées

#$connection=new CDbConnection($dsn,$username,$password);
# Format DSN
# SQLite : sqlite:/path/to/dbfile
# MySQL : mysql:host=localhost;dbname=testdb
# PostgreSQL : pgsql:host=localhost;port=5432; dbname=testdb
# SQL Server : mssql:host=localhost;dbname=testdb
# Oracle : oci:dbname=//localhost:1521/testdb
#Modifier l'alias dans le fichier de configuration

array(
    &#39;components&#39;=>array(
        &#39;db&#39;=>array(
            &#39;class&#39;=>&#39;CDbConnection&#39;,
            &#39;connectionString&#39;=>&#39;mysql:host=localhost;dbname=testdb&#39;,
            &#39;username&#39;=>&#39;root&#39;,
            &#39;password&#39;=>&#39;password&#39;,
            &#39;emulatePrepare&#39;=>true,  // needed by some MySQL installations
        ),
    ),
)
# Utilisez ensuite cette méthode pour établir une connexion, et nous pourrons accéder à la connexion à la base de données via


$connection = Yii::app()->db
#. Il est automatiquement activé sauf si nous configurons spécifiquement

# CDbConnection::autoConnect sur false.
# De cette façon, cette connexion unique à la base de données peut être partagée à de nombreux endroits de notre code.
# Sinon, vous devrez peut-être établir une connexion explicitement :
# $connection=new CDbConnection($dsn,$username,$password);

$connection->active=true;  # 建立链接之后active为true;
$connection->active=false;    # 关闭连接
#Exécuter SQL


$command=$connection->createCommand($sql);
#Modification SQL

$command->text = $newSQL;
############### ########################################
#execute() méthode Utilisée pour effectuez INSERT, UPDATE et DELETE.
En cas de succès, il renverra le nombre de lignes affectées par cette exécution.
La méthode #query() exécute une instruction SQL qui renvoie plusieurs lignes de données, telles que SELECT.
#En cas de succès, il renverra une instance CDbDataReader à travers laquelle les lignes de données résultantes pourront être parcourues.
#Pour plus de simplicité, (Yii) implémente également une série de méthodes queryXXX() pour renvoyer directement les résultats de la requête
#Si une erreur se produit dans SQL, une exception sera levée. .

$rowCount   =    $command->execute();        # 执行无查询 SQL
$dataReader =    $command->query();          # 执行一个 SQL 查询
$rows       =    $command->queryAll();       # 查询并返回结果中的所有行
$row        =    $command->queryRow();       # 查询并返回结果中的第一行
$column     =    $command->queryColumn();    # 查询并返回结果中的第一列
$value      =    $command->queryScalar();    # 查询并返回结果中第一行的第一个字段
################################### # ##################

#Obtenir les résultats de la requête
#Après avoir généré CDbDataReader
#Appeler à plusieurs reprises CDbDataReader::read()
#Vous pouvez utilisez également CDbDataReader
####par exemple dans la structure du langage foreach 🎜>while
( ($row = $dataReader->read()) !== false) { ... }
#Méthode 2 Utilisez foreach pour parcourir chaque ligne des données

$dataReader = $command->query();
foreach

($dataReader as $row) { ... }
#Méthode 3 Extrayez toutes les lignes dans un tableau en même temps$rows = $dataReader->readAll();#Note :
#Toutes les méthodes queryXXX() renverront des données directement
#query() ne le fait pas, il renvoie une instance de CDbDataReader#Utiliser les transactions


############################### ############## #########
#Le prétraitement (liaison de paramètres) évite l'injection et améliore l'efficacité des exécutions répétées
#Les espaces réservés peuvent être nommés (apparaissant comme balise unique) ou sans nom (apparaît comme un point d'interrogation). Les espaces réservés seront remplacés par les paramètres réels.
#Appelez CDbCommand::bindParam() ou CDbCommand::bindValue() pour remplacer ces espaces réservés par des paramètres réels.
#Ces paramètres n'ont pas besoin d'être mis entre guillemets : le pilote de base de données sous-jacent s'en chargera pour vous. Cette liaison de paramètre doit être terminée avant l'exécution de l'instruction SQL.

#Exemple
$transaction= $connection->beginTransaction();
try
{
    $connection->createCommand($sql1)->execute();
    $connection->createCommand($sql2)->execute();
    #其他
    $transaction->commit();
}
catch(Exception $e) # 如果有一条查询失败,则会抛出异常
{
    $transaction->rollBack(); #回滚
}
#Un SQL avec deux espaces réservés ":username" et ":email"




#Remplacez l'espace réservé par le nom d'utilisateur réel ":username"



#Remplacez l'espace réservé ":email" par l'e-mail réel"

$sql="INSERT INTO tbl_user (username, email) VALUES(:username,:email)";
$command = $connection->createCommand($sql);


#Lors de l'exécution répétée de la même logique

#Insérez une autre ligne avec une nouvelle jeu de paramètres
$command->bindParam(":username", $username, PDO::PARAM_STR);


#bindParam() et bindValue() sont très similaires.
$command->bindParam(":email",$email,PDO::PARAM_STR);
$command->execute();
#La seule différence est que le premier utilise une variable PHP pour lier les paramètres,

# et le second utilise une valeur. Pour les paramètres de blocs de données volumineux en mémoire, pour des raisons de performances, les premiers doivent être utilisés en premier.
########################################### ### #######
#Lier la colonne

$command->bindParam(":username",$username2,PDO::PARAM_STR);
$command->bindParam(":email",$email2,PDO::PARAM_STR);
$command->execute();


#Utiliser la variable $username pour lier la première colonne (nom d'utilisateur)



#Utilisez la variable $email pour lier la deuxième colonne (e-mail)

$sql="SELECT username, email FROM tbl_user";
$dataReader=$connection->createCommand($sql)->query();


while
$dataReader->bindColumn(1,$username);
($dataReader->read()!==false)

{
#$username et $email contiennent le nom d'utilisateur et l'e-mail dans la ligne actuelle

#Il n'est pas nécessaire d'attribuer des valeurs à deux variables à chaque fois
$dataReader->bindColumn(2,$email);
}

###### # ############################################## ##Utiliser le préfixe de table#Configurez l'attribut CDbConnection::tablePrefix sur le préfixe de table souhaité.




#####################


où ( ) (disponible depuis la v1.1.6)
array(
    &#39;components&#39;=>array(
        &#39;db&#39;=>array(
            &#39;class&#39;=>&#39;CDbConnection&#39;,
            &#39;connectionString&#39;=>&#39;mysql:host=localhost;dbname=testdb&#39;,
            &#39;username&#39;=>&#39;root&#39;,
            &#39;password&#39;=>&#39;password&#39;,
            &#39;emulatePrepare&#39;=>true,  // needed by some MySQL installations
            &#39;tablePrefix&#39;=>"表前缀_"
        ),
    ),
)
public CDbCommandwhere(mixed $conditions, array $params=array())
$sql=&#39;SELECT * FROM {{user}}&#39;;
$users=$connection->createCommand($sql)->queryAll();
$conditions conditions mixtes placées dans la partie WHERE. >                                                                                                                                                         .

Cette méthode nécessite un paramètre $conditions et un paramètre $params, spécifiant la valeur à lier à la requête.

$user = Yii::app()->db->createCommand()
        ->select(&#39;username, password&#39;)
        ->from(&#39;tbl_user&#39;)
        ->where(&#39;id=:id&#39;, array(&#39;:id&#39;=>1))
        ->queryRow();


Le paramètre $conditions peut être une chaîne (telle que 'id=1') ou un tableau.

Si c'est ce dernier, il doit être du format tableau(opérateur, opérande1, opérande2, ...), l'opérateur peut être l'un des suivants, les opérandes possibles dépendent de l'opérateur correspondant :
et : les opérandes doivent être connectés à l’aide de AND.
Par exemple :
array('and', 'id=1', 'id=2')
générera
'id=1 AND id=2'. Si un opérande est un tableau, il est converti en chaîne en utilisant les mêmes règles décrites ici. Par exemple :
array('and', 'type=1', array('or', 'id=1', 'id=2'))
générera
'type=1 AND ( id=1 OR id=2)'
Cette méthode ne fera aucune citation ni échappement.
ou : similaire à l'opérateur et, sauf que les opérandes sont connectés à l'aide de OU.
in : l'opérande 1 doit être une colonne ou une expression de base de données, l'opérande 2 doit être un tableau, indiquant la plage dans laquelle doit se trouver la valeur de la colonne ou de l'expression de base de données correspondante.
Par exemple :
array('in', 'id', array(1,2,3))
générera 'id IN (1,2,3)'
Cette méthode générera être correct Le nom de la colonne cité et la valeur d'échappement dans la plage.
not in : similaire à in, sauf que IN est remplacé par NOT IN lors de la génération des conditions.
like : l'opérande 1 doit être une colonne ou une expression de base de données, l'opérande 2 est une chaîne ou un tableau indiquant la valeur de la colonne ou de l'expression de base de données qui devrait ressembler.
Par exemple :
array('like', 'name', '%tester%')
générera
"name LIKE '%tester%'"
lorsque la plage de valeurs est donné Sous forme de tableau, plusieurs prédicats LIKE seront générés et connectés à l'aide de AND.
Par exemple :
array('like', 'name', array('%test%', '%sample%'))
générera
"name LIKE '%test%' AND name LIKE '%sample%'"
Cette méthode citera correctement les valeurs d'échappement dans les noms de colonnes et les plages.
not like : similaire à like, sauf que NOT LIKE est utilisé à la place de LIKE lors de la génération des conditions.
or like : similaire à like, sauf que OR est utilisé pour connecter les prédicats LIKE.
or not like : similaire à not like, sauf que OR est utilisé pour connecter les prédicats NOT LIKE.

Recommandations associées :

Détails du framework yii

Multi-module multi-application Yii

Concepts de base de la configuration Yii2

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