CFQUERYPARAM | |||
説明
クエリーパラメータのデータタイプを検証します。バインド変数をサポートする DBMS では、SQL ステートメントでバインド変数を使用できるようにします。バインド変数を使用することで、cfquery ステートメントを何度も実行するときのパフォーマンスが向上します。 このタグは、クエリー SQL ステートメント内に埋め込まれた cfquery タグ内にネストされます。オプションのパラメータを指定すると、このタグはデータ検証を実行します。 各 cfquery タグ内で cfqueryparam タグを使用して、未認可のユーザーからデータベースを保護するようにしてください。詳細については、セキュリティ情報 ASB99-04「Multiple SQL Statements in Dynamic Queries」(www.macromedia.com/devnet/security/security_zone/asb99-04.html) および 『ColdFusion MX 開発ガイド』の第20章の「データへのアクセスおよび取り出し」 を参照してください。 |
|||
カテゴリ
データベース操作タグ | |||
シンタックス<cfquery name = "query_name" dataSource = "ds_name" ...他の属性... SQL STATEMENT column_name = <cfqueryparam value = "parameter value" CFSQLType = "parameter type" maxLength = "maximum parameter length" scale = "number of decimal places" null = "yes"、"no" list = "yes"、"no" separator = "separator character"> AND/OR ...WHERE 節の補足条件... </cfquery> |
|||
関連項目
cfinsert、cfprocparam、cfprocresult、cfquery、cfstoredproc、cftransaction、cfupdate、『ColdFusion MX 開発ガイド』の第20章の「データへのアクセスおよび取り出し」 の「cfqueryparam によるセキュリティの強化」
|
|||
使用方法
cfqueryparam タグは、ColdFusion 変数を使用する任意の SQL ステートメント (SELECT、INSERT、UPDATE、DELETE など) で使用します。 cfquery、cachedAfter、または cachedWithin の各属性は、cfqueryparam と共に使用できません。 文字列データの検証の最大値を決定するために、maxlength 属性を指定します。 このタグでは次のことが実行されます。
バインド変数によるパフォーマンスの向上を活かすには、すべての ColdFusion 変数に cfqueryparam を使用する必要があります。また、DBMS がバインド変数をサポートしている必要があります。DBMS がバインドパラメータをサポートしていない場合は、ColdFusion で検証が行われ、検証済みのパラメータ値が文字列に置き換えられます。検証に失敗すると、エラーメッセージが返されます。 検証ルールは次のとおりです。
ColdFusion のデバッグ出力では、バインド変数が疑問符 (?) で表示され、クエリーの下に値が使用順に表示されます。
次の表は、JDBC SQL タイプを使用する ColdFusion SQL データタイプのマッピング、および各データベース管理システムのデータタイプを示しています。
|
|||
例<!--- この例では、Course_ID に有効な入力が与えられた場合の cfqueryparam を示します。 ---> <h3>cfqueryparam の例</h3> <cfset Course_ID = 12> <cfquery name = "getFirst" dataSource = "cfdocexamples"> SELECT * FROM courses WHERE Course_ID = <cfqueryPARAM value = "#Course_ID#" CFSQLType = "CF_SQL_INTEGER"> </cfquery> <cfoutput query = "getFirst"> <p>コース番号 : #Course_ID#<br> 説明 : #descript#</p> </cfoutput> <!--- この例では、Course_ID に無効な文字列データがある場合の CFQUERYPARAM の使い方を示します。 ----> <p>この例では、CFQUERYPARAM タグに渡される値が MAXLENGTH 属性の値を越えるので、エラーが発生します。</p> <cfset LastName="Peterson; DELETE employees WHERE LastName='Peterson'"> <!------- 文字列を入力する場合は、検証のために MAXLENGTH 属性を 指定しなければならないことに注意してください。 --------------------------------------------------> <cfquery name="getFirst" datasource="cfdocexamples"> SELECT * FROM employees WHERE LastName=<cfqueryparam value="#LastName#" cfsqltype="CF_SQL_VARCHAR" maxlength="17"> </cfquery> <cfoutput query="getFirst"> <p> コース番号 : #FirstName# #LastName# 説明 : #Department# </p> </cfoutput> |
CF_SQL_ARRAY | |
ARRAY | |
|
CF_SQL_BIGINT | |
BIGINT | |
Default value: "Bigint"
int8、serial8
|
CF_SQL_BINARY | |
BINARY | |
Default value: "Char for Bit Data"
binary timestamp |
CF_SQL_BIT | |
BIT | |
boolean
bit |
CF_SQL_BLOB | |
BLOB | |
Default value: "Blob"
blob blob、bfile
|
CF_SQL_CHAR | |
CHAR | |
Default value: "Char"
char、 nchar char、 nchar char、nchar、 unique |
CF_SQL_CLOB | |
CLOB | |
Default value: "Clob"
clob clob、nclob
|
CF_SQL_DATE | |
DATE | |
Default value: "Date"
date、datetime、year to day
|
CF_SQL_DECIMAL | |
DECIMAL | |
Default value: "Decimal"
decimal、money number decimal、money、small |
CF_SQL_DISTINCT | |
DISTINCT | |
|
CF_SQL_DOUBLE | |
DOUBLE | |
Default value: "Double"
|
CF_SQL_FLOAT | |
FLOAT | |
Default value: "Float"
float number float |
CF_SQL_IDSTAMP | |
CHAR | |
Default value: "Char"
char、nchar char、nchar char、nchar、unique |
CF_SQL_INTEGER | |
INTEGER | |
Default value: "Integer"
integer、serial
int |
CF_SQL_LONGVARBINARY | |
LONGVARBINARY | |
Default value: "Long Varchar for Bit Data"
byte long raw image |
CF_SQL_LONGVARCHAR | |
LONGVARCHAR | |
Default value: "Long Varchar"
text long text、ntext |
CF_SQL_MONEY | |
DOUBLE | |
Default value: "Double"
|
CF_SQL_MONEY4 | |
DOUBLE | |
Default value: "Double"
|
CF_SQL_NULL | |
NULL | |
|
CF_SQL_NUMERIC | |
NUMERIC | |
Default value: "Numeric"
numeric |
CF_SQL_OTHER | |
OTHER | |
|
CF_SQL_REAL | |
REAL | |
Default value: "Real"
smallfloat
real |
CF_SQL_REFCURSOR | |
REF | |
|
CF_SQL_SMALLINT | |
SMALLINT | |
Default value: "Smallint"
smallint
smallint |
CF_SQL_STRUCT | |
STRUCT | |
|
CF_SQL_TIME | |
TIME | |
Default value: "Time"
datetime hour to second
|
CF_SQL_TIMESTAMP | |
TIMESTAMP | |
Default value: "Timestamp"
datetime year to fraction(5)、datetime year to second date datetime、smalldate |
CF_SQL_TINYINT | |
TINYINT | |
tinyint |
CF_SQL_VARBINARY | |
VARBINARY | |
Default value: "Rowid"
raw varbinary |
CF_SQL_VARCHAR | |
VARCHAR | |
Default value: "Varchar"
varchar、nvarchar、lvarchar varchar2、nvarchar2 varchar、nvarchar、sysname |
VALUE | |
必須 | |
ColdFusion によって where 句の比較演算子の右側に渡される値です。 CFSQLType が日付または時刻のオプションの場合は、日付の値に必ず使用中の DBMS 固有の日付形式を使用します。CreateODBCDateTime または DateFormat および TimeFormat 関数を使用して、日付の値の形式を設定します。 |
CFSQLTYPE | |
オプション | |
Default value: "CF_SQL_CHAR"
任意のタイプのパラメータが結合される SQL タイプです。
|
MAXLENGTH | |
オプション | |
Default value: "value 属性値の文字列の長さ"
パラメータの最大の長さです。文字列が DBMS に送信される前に ColdFusion で長さチェックを実行するようにする必要があります。その結果、悪意のある文字列の送信を回避できます。 |
SCALE | |
オプション | |
Default value: "0"
パラメータの小数点以下の桁数です。CF_SQL_NUMERIC および CF_SQL_DECIMAL に適用されます。 |
NULL | |
オプション | |
Default value: "No"
パラメータを null 値として渡すかどうかを指定します。
|
LIST | |
オプション | |
Default value: "No"
|
SEPARATOR | |
value 属性でリストを指定する場合は必須 | |
Default value: ", (カンマ)"
value 属性内で、リストの値を区切る文字です。 |