coldfusion
データベースクエリ
サーチ…
データベースの操作
ColdFusionの強みの1つは、データベースでの作業の容易さです。もちろん、クエリ入力はパラメータ化することも、パラメータ化することもできます。
タグ実装
<cfquery name="myQuery" datasource="myDatasource" result="myResult">
select firstName, lastName
from users
where lastName = <cfqueryparam value="Allaire" cfsqltype="cf_sql_varchar">
</cfquery>
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);
値を挿入するのも簡単です:
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;
基本的な例
データベース接続は、CF管理者ツールを使用して設定します。データソースの接続方法については、「データベース接続」を参照してください。
クエリを実行するには、 <cfquery>タグが必要です。 <cfquery>タグはデータベースに接続して開きます。データソースの名前を指定するだけです。
<cfquery name="Movies" datasource="Entertainment">
SELECT title
FROM Movies
</cfquery>
クエリ結果を表示するには:
<cfoutput query="Movies">
#title#<BR>
</cfoutput>
認証
多くのデータベース構成では、データベースに照会する前に認証(ユーザー名とパスワードの形式)が必要です。これらは、ユーザー名とパスワードの属性を使用して指定できます。
注意:ユーザー名とパスワードは、ColdFusion Administratorのデータソースに対して設定することもできます。これらの詳細をクエリに指定すると、ColdFusion Administratorのユーザー名とパスワードが上書きされます。
<cfquery datasource="Entertainment" username="webuser" password="letmein">
select *
from Movies
</cfquery>
キャッシュされたクエリ
キャッシュされたクエリは、その結果がサーバーのメモリに格納されているクエリです。結果は、クエリが最初に実行されるときに格納されます。その後、そのクエリーが再度要求されるたびに、ColdFusionはメモリから結果を取得します。
cachedAfter属性を使用してクエリをキャッシュできます。指定された日付の後にクエリが最後に実行された場合、キャッシュされたデータが使用されます。それ以外の場合は、クエリが再実行されます。
<cfquery datasource="Entertainment" cachedAfter="July 20, 2016">
select *
from Movies
</cfquery>
キャッシュを使用し、データベースへの複数の呼び出しを避けるには、現行の照会は、使用されたキャッシュ照会と同じSQLステートメント、データ・ソース、照会名、ユーザー名、およびパスワードを使用する必要があります。これには、クエリの空白が含まれます。
そのため、次のクエリでは、トリムされた文字は同じで、クエリ結果は同じですが、異なるキャッシュが作成されます。
<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>
返されるレコード数の制限
maxrows属性を使用すると、返される行数を制限することができます。
<cfquery datasource="Entertainment" maxrows="50">
select *
from Movies
</cfquery>
タイムアウト
timeout属性を使用してtimeout制限を設定できます。これは、要求がはるかに長く実行され、結果としてアプリケーション全体に影響を及ぼさないようにするのに役立ちます。
timeout属性は、クエリの各アクションがエラーを返す前に実行できる最大秒数を設定します。
<cfquery datasource="Entertainment" timeout="30">
select *
from Movies
</cfquery>