2012-03-19 8 views
10

cfqueryparamまたはcfprocparamをコーディングする場合、cfsqltypeはオプションです。しかし、私は通常、それがコード化されているのを見ました。 cfsqltypeを指定する利点はありますか?cfsqltypeを使用していますか?

答えて

16

主な利点は、照会入力を照会に渡す前に、照会入力の健全性検査のレベルを上げることです。また、日付の時刻値の場合、cfsqltype = "CF_SQL_DATE"または "CF_SQL_TIMESTAMP"が指定されていると、CFはdatetime文字列を適切なデータベース形式に正しく変換すると考えています。

また、将来の開発者がコードを読むときに除外されるタイプをより明確にすることができると思います。

+0

CFは真偽値をCF_SQL_BIT(1または0)に変換し、任意の数値をCF_SQL_INT(丸め)に変換します。 – Henry

+0

よく表現された答えをありがとう!私はこれらが理由のいくつかであると考えましたが、文書を見つけることができず、これは非常に明確で簡潔です – froadie

13

私はJakeさんのコメントに追加します。ほとんどのRDBMSでは、データベースは、適切な型であることを保証するために型参照を介して変数を実行する必要があります。または、暗黙的に適切な型にキャストできます。 DBは単にテーブルまたはビューに "Any Any"という変数を投げるだけではありません。実行計画に適切な型付けを組み込む必要があります。したがって、タイプを指定しない場合は、DBに「把握する」ことを求めています。

ただし、タイプを指定するときは、データ型を先取りするか事前に修飾します。エンジンは、ドライバが特定のタイプの変数を提示していることを知っており、それを直接使用するか、または直接それを派生させることができます。

セキュリティはcfqueryparamを使用する正当な理由ですが、それが唯一の理由であることに注意してください。もう1つの理由は、効率的に実行でき、理想的にはDBサーバー上の実行計画キャッシュを「ポップ」するように、正しく準備されたステートメントを作成することです。

+2

+1。再:* ..あなたはDBを "それを把握"するように求めています。* ..そして結果はいつもあなたが意図したものではありません。暗黙の変換を避ける方が良い。 – Leigh

+0

ありがとう、良い点。ちょうど興味のない - それはデータベースのデータ型を一致させるための余分なオーバーヘッドがかかりますか? (dbは時間を費やさなければならないので、cfsqltypeなしで実行するには少し時間がかかります) – froadie

+0

Froadie - ある程度のオーバーヘッドがあります。あなたはそれを見ないでしょうが、私はcfsqltypeを使用しないと考えることはできません: –

関連する問題