2016-08-16 3 views
-1

識別子が変数と一致する行を選択する必要があります。たとえば、私の変数の値は「myvariable」です(もちろん、uniqueidentifier形式)。ここでcfqueryで "uniqueidentifier"タイプを選択

<cfset current_user_id = "myvariable"> 

は私の "cfqueryの" コンテンツです:

<cfquery name="findUser" datasource="#SOURCE#"> 
    SELECT 
     db.[User].UserID 
    FROM 
     db.[User] 
    WHERE 
     db.[User].UserID = "#current_user_id#"; 
</cfquery> 

それは次のエラーを返します。

[Macromedia][SQLServer JDBC Driver][SQLServer]Invalid column name 'myvariable'.

データとクエリで結構です。 SELECT *のcfdumpはすべての行を返しますが、WHERE句を追加するとエラーが発生します。クエリは、WHERE句であっても、ColdFusion外で正常に動作します。

どちらか私はこれを追加しようとしたが、それは動作しません:

<cfqueryparam value = "#current_user_id#" cfsqltype="cf_sql_idstamp"> 

は、私が条件と「UNIQUEIDENTIFIER」タイプを選択する知っておくべきものはありますか?たぶん私の変数の型をどうにかして "uniqueidentifier"に設定する必要がありますか?

CFバージョン10,0

ありがとうございます!

+5

値に二重引用符を使用しないでください。だから ''#current_user_id# ''。 cfqueryparamは正常に見えます - それと同じエラーか別のエラーが出ますか?また、どのCF版を使用していますか?9,10,11をタグ付けしました。 –

+0

二重引用符を一重引用符に変更しました。ありがとうございました! –

+0

クエリパラメータの場合、データ型をvarcharに変更してみます。 –

答えて

0

例えば:

<cfqueryparam cfsqltype="cf_sql_varchar" value="1890958b-dec9-0dfc-c372-306a897693ea" /> 

注これはCFLIB.ORG CreateGUID()関数からUUIDのMSSQL互換性のあるバージョンを使用しています。

0

Tried adding [cfqueryparam] but it doesn't work either:

どのよう動作しませんか?基本的にuniqueidentifierfixed length stringとして処理されます。限り、あなたは正しい値を供給するよう、文字に使用される基本型のいずれかが細かいです:CF_SQL_CHAR

  • CF_SQL_VARCHAR
  • CF_SQL_IDSTAMP

    • (ちょうどCF_SQL_CHARの同義語)

    のすべてこれらのタイプはColdFusion 10/11とSQL Server 2008で正常に動作します。そのため、データやコードの違いが原因です。

    DDL:

    CREATE TABLE TestTable (UserID UNIQUEIDENTIFIER, UserName VARCHAR(100)); 
    

    CODE:

    <cfset current_user_id = "6F9619FF-8B86-D011-B42D-00C04FC964FF"> 
    
    <!--- 1: CF_SQL_IDSTAMP ---> 
    <cfquery name="qTest"> 
        SELECT UserID 
        FROM TestTable 
        WHERE UserID = <cfqueryparam value = "#current_user_id#" cfsqltype="cf_sql_idstamp"> 
    </cfquery> 
    
    <!--- 2: CF_SQL_CHAR ---> 
    <cfquery name="qTest"> 
        SELECT UserID, UserName 
        FROM TestTable 
        WHERE UserID = <cfqueryparam value = "#current_user_id#" cfsqltype="cf_sql_char"> 
    </cfquery> 
    
    <!--- 3: CF_SQL_VARCHAR ---> 
    <cfquery name="qTest"> 
        SELECT UserID, UserName 
        FROM TestTable 
        WHERE UserID = <cfqueryparam value = "#current_user_id#" cfsqltype="cf_sql_varchar"> 
    </cfquery> 
    

    changed double quotes to single quotes and it worked

    技術的に、あなたは引用符を使用することができますが - ません。 CFQueryparamはさらに多くの利点を提供します。たとえば、文字列の引用を心配する必要はなくなりました;-) SQLインジェクション保護、データ型チェック、クエリパフォーマンスの向上などについて言及することはありません。

  • 関連する問題