2010-12-20 8 views
0

以下のMySQLクエリがあります。エラーが発生しています。エラーも以下のとおりです。私はこのコードを書いていないと私は#Replace()#が使用されている理由は、誰もが構文エラーを修正する方法を見ることができるかわからないデータベースColdFusionのspoiling SQLクエリの置き換え

SELECT DISTINCT s.id as id, s.auctioneer as auctioneer, s.advertType as advertType, s.saleType as saleType, an.name as auctioneerName, st.entryCopy as saleTypeName, at.entryCopy as advertTypeName, s.heading AS heading, sl.city AS city, sd.id AS sdId, sd.startDate AS startDate 
FROM sales s 
LEFT JOIN saleloc sl ON sl.saleId = s.id 
LEFT JOIN saledates sd ON sd.saleLoc = sl.id, auctioneers an, lookupcopy st, lookupcopy at 
'WHERE s.advertType > 0 
AND s.saleType > 0 
AND sl.region = "2" ' 
AND s.id = sd.saleId 
AND sl.saleId = s.id 
AND an.id = s.auctioneer 
AND st.id = s.saleType 
AND at.id = s.advertType 
GROUP BY id 
ORDER BY startDate, auctioneerName, city 

から

SELECT DISTINCT s.id as id, s.auctioneer as auctioneer, s.advertType as advertType, s.saleType as saleType, an.name as auctioneerName, st.entryCopy as saleTypeName, at.entryCopy as advertTypeName, s.heading AS heading, sl.city AS city, sd.id AS sdId, sd.startDate AS startDate 
    FROM sales s LEFT JOIN saleloc sl ON sl.saleId = s.id LEFT JOIN saledates sd ON sd.saleLoc = sl.id, 
      auctioneers an, 
      lookupcopy st, 
      lookupcopy at 
    #replace(findWhere,"''","'","all")# AND 
    s.id = sd.saleId AND sl.saleId = s.id 
    AND an.id = s.auctioneer 
    AND st.id = s.saleType 
    AND at.id = s.advertType 
    GROUP BY id  
    ORDER BY startDate, auctioneerName, city 

エラーそれが原因ですか?

答えて

1
Before the query code, do a replace as follows: 

<cfset findWhere = Replace(findWhere, "''", "'", "ALL")# 
<cfif Left(findWhere, 1) EQ "'"> 
    <cfset findWhere = Right(findWhere, Len(findWhere) - 1)> 
</cfif> 
<cfif Right(findWhere, 1) EQ "'"> 
    <cfset findWhere = Left(findWhere, Len(findWhere) - 1)> 
</cfif> 

<cfquery name="qry" datasource="mysql"> 
SELECT DISTINCT s.id as id, s.auctioneer as auctioneer, s.advertType as advertType, s.saleType as saleType, an.name as auctioneerName, st.entryCopy as saleTypeName, at.entryCopy as advertTypeName, s.heading AS heading, sl.city AS city, sd.id AS sdId, sd.startDate AS startDate 
FROM sales s 
LEFT JOIN saleloc sl ON sl.saleId = s.id 
LEFT JOIN saledates sd ON sd.saleLoc = sl.id, 
     auctioneers an, 
     lookupcopy st, 
     lookupcopy at 
#findWhere# AND 
s.id = sd.saleId AND sl.saleId = s.id 
AND an.id = s.auctioneer 
AND st.id = s.saleType 
AND at.id = s.advertType 
GROUP BY id  
ORDER BY startDate, auctioneerName, city 
</cfquery> 
+0

また、MySQLが二重引用符を使用しているかどうかわからないので、二重引用符を一重引用符地域変数の周り。 – eapen

0

findWhereに格納された値には、文字列の先頭と末尾に一重引用符が含まれます。

+0

こんにちは、ありがとうございます。救済のためのアイデア?どうすればこの問題を解決できますか? –

+0

データがあなたにそんなに来ている理由を説明し、適切な場所( 'findWhere'を設定しているものであれ、さらに上流にあるものであれ)でその問題を修正してください。 – yfeldblum

0

別の注意:直接ユーザー入力値なしでfindWhereを作成した場合を除き、それを保護する必要があります。行うには

ベター:

... 
WHERE 1= 1 
<cfif listFind('foo' , findWhere)> 
foo= 2 

<cfelseif listFind('bar' , findWhere)> 
bar= 209 

</cfif> 
... 
+0

こんにちは。あなたの答えは私を完全に混乱させました、私はCF開発者ではありません、私たちは離れている間にこれを修正しようとしています。私のスキルは他にあります。あなたは詳細を教えていただけますか?ありがとう。 –

+0

CFでは、を使用してクエリを保護します。 ここでs.id =

0

だけ明確にする、私はあなたが同じクエリで文によってはっきりとグループを行うことができると信じていません。

彼らはどちらも同じ種類のことをしますが、異なる理由があります。

関連する問題