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 属性を指定します。

このタグでは次のことが実行されます。

  • SQL バインドパラメータを使用可能にします。これによりパフォーマンスが向上します。
  • 指定された SQL タイプと変数データが一致していることを確認します。
  • SQL ステートメントからの長いテキストフィールドの更新を可能にします。
  • 文字列変数を一重引用符でエスケープします。

バインド変数によるパフォーマンスの向上を活かすには、すべての ColdFusion 変数に cfqueryparam を使用する必要があります。また、DBMS がバインド変数をサポートしている必要があります。DBMS がバインドパラメータをサポートしていない場合は、ColdFusion で検証が行われ、検証済みのパラメータ値が文字列に置き換えられます。検証に失敗すると、エラーメッセージが返されます。

検証ルールは次のとおりです。

  • 次のタイプについては、データ値を数値に変換することができます。
    CF_SQL_SMALLINT、CF_SQL_INTEGER、CF_SQL_REAL、CF_SQL_FLOAT、CF_SQL_DOUBLE、CF_SQL_TINYINT、CF_SQL_MONEY、CF_SQL_MONEY4、CF_SQL_DECIMAL、CF_SQL_NUMERIC、および CF_SQL_BIGINT
  • 次のタイプについては、データ値をターゲットデータソースでサポートされる日付に変換できます。CF_SQL_DATE、CF_SQL_TIME、CF_SQL_TIMESTAMP
  • その他のタイプでは、maxLength 属性が使用される場合、データ値は指定されている最大長を越えることはできません。

ColdFusion のデバッグ出力では、バインド変数が疑問符 (?) で表示され、クエリーの下に値が使用順に表示されます。

メモ: SequelLink ODBC Socket または SequelLink Access ドライバを使用して Microsoft Access テーブルに空の文字列を挿入するには、CFSQLType 属性で CF_SQL_LONGVARCHAR を指定する必要があります。

次の表は、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
identifier

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
money

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
identifier

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
time

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 タイプです。

  • CF_SQL_BIGINT
  • CF_SQL_BIT
  • CF_SQL_CHAR
  • CF_SQL_BLOB
  • CF_SQL_CLOB
  • CF_SQL_DATE
  • CF_SQL_DECIMAL
  • CF_SQL_DOUBLE
  • CF_SQL_FLOAT
  • CF_SQL_IDSTAMP
  • CF_SQL_INTEGER
  • CF_SQL_LONGVARCHAR
  • CF_SQL_MONEY
  • CF_SQL_MONEY4
  • CF_SQL_NUMERIC
  • CF_SQL_REAL
  • CF_SQL_REFCURSOR
  • CF_SQL_SMALLINT
  • CF_SQL_TIME
  • CF_SQL_TIMESTAMP
  • CF_SQL_TINYINT
  • CF_SQL_VARCHAR
MAXLENGTH  
  オプション
 
Default value: "value 属性値の文字列の長さ"

パラメータの最大の長さです。文字列が DBMS に送信される前に ColdFusion で長さチェックを実行するようにする必要があります。その結果、悪意のある文字列の送信を回避できます。

SCALE  
  オプション
 
Default value: "0"

パラメータの小数点以下の桁数です。CF_SQL_NUMERIC および CF_SQL_DECIMAL に適用されます。

NULL  
  オプション
 
Default value: "No"

パラメータを null 値として渡すかどうかを指定します。

  • Yes: value 属性を無視します。
  • No
LIST  
  オプション
 
Default value: "No"
  • Yes: value 属性値は区切りリストです。
  • No
SEPARATOR  
  value 属性でリストを指定する場合は必須
 
Default value: ", (カンマ)"

value 属性内で、リストの値を区切る文字です。