サーチ…


データベースの操作

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>


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow