0

次のようなクエリがあります。

SELECT * 
FROM qAll 
WHERE name not in('Alina,Charaidew,Sukapha') 

これは機能していません。そうするための最良の方法は何ですか?このリストは動的に生成され、毎回異なる可能性があります。

4

5 に答える 5

4

CF では、クエリ パラメータに cfqueryparam を使用する必要があります。リストをパラメーターとして渡すには、list 属性を cfqueryparam に追加する必要があります。クエリは次のようになります。

<cfset nameList = "Alina,Charaidew,Sukapha">
<cfquery name="queryName" datasource="#Application.ds#">
        SELECT * FROM qAll WHERE name NOT IN (<cfqueryparam cfsqltype="CF_SQL_VARCHAR" list="Yes" value="#nameList#" >)    
</cfquery>
于 2016-03-11T10:19:57.337 に答える
2

はクエリqAllオブジェクトです。

'Alina,Charaidew,Sukapha'は単一の値を表しているため、次のようにcfqueryparamのリストを使用してリストであることを指定する必要があります。attribute

<cfquery dbtype="query" name="someName">
    SELECT * 
    FROM qAll 
    WHERE name NOT IN (<cfqueryparam cfsqltype="cf_sql_varchar" value="Alina,Charaidew,Sukapha" list="yes" separator=",">)
</cfquery>

注:- これは大文字と小文字が区別されます。

于 2016-03-11T10:20:09.473 に答える
0

ここには 2 つの部分があります。

  1. 問題の根本は、リストの作成方法にあります。SQL は、テキスト修飾子として一重引用符 (') を含むカンマ区切りのリストを探しています。文字列全体が一重引用符 (') で囲まれているため、1 つのリストとして扱われます。

あなたのもの:

SELECT * 
FROM qAll 
WHERE name not in('Alina,Charaidew,Sukapha') 

正しい SQL:

SELECT * 
FROM qAll 
WHERE name not in('Alina','Charaidew','Sukapha') 
  1. ColdFusion では、cfquery タグを使用する場合は cfqueryparam タグを使用することをお勧めします。これはパフォーマンスに役立ち、リストが変数である場合、SQL インジェクションから (多少) ガードします。「list="Yes"」属性に注意してください。これにより、実行時にテキスト修飾子として一重引用符を使用してリストが適切に修飾されます。
    <cfset names = "Alina,Charaidew,Sukapha">
    <cfquery name="queryName" datasource="#Application.ds#">
            SELECT * FROM qAll WHERE name NOT IN (<cfqueryparam cfsqltype="CF_SQL_VARCHAR" list="Yes" value="#nameList#" >)    
    </cfquery>
于 2016-03-21T21:40:29.807 に答える