coldfusion
Requêtes de base de données
Recherche…
Travailler avec des bases de données
L'une des forces de ColdFusion réside dans la facilité d'utilisation des bases de données. Et bien sûr, les entrées de requête peuvent et doivent être paramétrées.
Mise en œuvre des balises
<cfquery name="myQuery" datasource="myDatasource" result="myResult">
select firstName, lastName
from users
where lastName = <cfqueryparam value="Allaire" cfsqltype="cf_sql_varchar">
</cfquery>
Implémentation CFScript
// ColdFusion 9+
var queryService = new query(name="myQuery", datasource="myDatasource");
queryService.addParam(name="lName", value="Allaire", cfsqltype="cf_sql_varchar");
var result = queryService.execute(sql="select firstName, lastName from users where lastName = :lName");
var myQuery = result.getResult();
var myResult = result.getPrefix();
// ColdFusion 11+
var queryParams = {lName = {value="Allaire", cfsqltype="cf_sql_varchar"}};
var queryOptions = {datasource="myDatasource", result="myResult"};
var myQuery = queryExecute("select firstName, lastName from users", queryParams, queryOptions);
L'insertion de valeurs est tout aussi simple:
queryExecute("
insert into user( firstname, lastname )
values( :firstname, :lastname )
",{
firstname: { cfsqltype: "cf_sql_varchar", value: "Dwayne" }
,lastname: { cfsqltype: "cf_sql_varchar", value: "Camacho" }
},{
result: "local.insertResult"
});
return local.insertResult.generated_key;
Exemple de base
Les connexions à la base de données sont configurées à l'aide de l'outil Administrateur CF. Voir Connexions aux bases de données pour savoir comment connecter une source de données.
Pour exécuter des requêtes, il vous suffit d'utiliser la <cfquery> . La <cfquery> connecte et ouvre la base de données pour vous, il vous suffit de lui fournir le nom de la source de données.
<cfquery name="Movies" datasource="Entertainment">
SELECT title
FROM Movies
</cfquery>
Pour afficher les résultats de la requête:
<cfoutput query="Movies">
#title#<BR>
</cfoutput>
Authentification
De nombreuses configurations de base de données nécessitent une authentification (sous la forme d'un nom d'utilisateur et d'un mot de passe) avant de pouvoir interroger la base de données. Vous pouvez les fournir en utilisant les attributs nom d'utilisateur et mot de passe.
Remarque: le nom d'utilisateur et le mot de passe peuvent également être configurés avec la source de données dans l'Administrateur ColdFusion. La fourniture de ces informations dans votre requête remplace le nom d'utilisateur et le mot de passe de l'administrateur ColdFusion.
<cfquery datasource="Entertainment" username="webuser" password="letmein">
select *
from Movies
</cfquery>
Requêtes en cache
Une requête en cache est une requête dont les résultats sont stockés dans la mémoire du serveur. Les résultats sont stockés lors de la première exécution de la requête. À partir de ce moment, chaque fois que cette requête est à nouveau demandée, ColdFusion récupère les résultats de la mémoire.
Vous pouvez mettre en cache une requête à l'aide de l'attribut cachedAfter . Si la requête a été exécutée pour la dernière fois après la date fournie, les données mises en cache sont utilisées. Sinon, la requête est réexécutée.
<cfquery datasource="Entertainment" cachedAfter="July 20, 2016">
select *
from Movies
</cfquery>
Pour que le cache soit utilisé et que plusieurs appels à la base de données soient évités, la requête en cours doit utiliser la même instruction SQL, la même source de données, le même nom de requête, le même nom d'utilisateur et le même mot de passe. Cela inclut les espaces dans la requête.
En tant que telles, les requêtes suivantes créent des caches différents, même si les caractères tronqués sont identiques et que les résultats de la requête sont identiques:
<cfquery datasource="Entertainment" cachedAfter="July 20, 2016">
select *
from Movies
<cfif false>
where 1 = 1
</cfif>
<cfif true>
where 1 = 1
</cfif>
</cfquery>
<cfquery datasource="Entertainment" cachedAfter="July 20, 2016">
select *
from Movies
<cfif true>
where 1 = 1
</cfif>
<cfif false>
where 1 = 1
</cfif>
</cfquery>
Limiter le nombre de dossiers retournés
Vous pouvez limiter le nombre de lignes à retourner en utilisant l'attribut maxrows .
<cfquery datasource="Entertainment" maxrows="50">
select *
from Movies
</cfquery>
Des délais d'attente
Vous pouvez définir une limite de délai d'attente à l'aide de l'attribut de timeout . Cela peut être utile pour empêcher les demandes de s'exécuter beaucoup plus longtemps qu'elles ne le devraient et, par conséquent, pour toute l'application.
L'attribut timeout définit le nombre maximal de secondes que chaque action d'une requête est autorisée à exécuter avant de renvoyer une erreur.
<cfquery datasource="Entertainment" timeout="30">
select *
from Movies
</cfquery>