Next Page

1

Previous Page

スレッド: '(Shift+7)の登録

作成日: 01/23/09 02:21 AM

返信: 7

fatma


新米


入会日: 05/07/08

投稿数: 15

'(Shift+7)の登録
01/22/09 10:57 AM

こんにちは。
少し、お知恵を貸していただけますでしょうか。

現在、ColdFusion MX7 と SQLServer2003 を使ってWEBシステムを構築しております。
DBの更新にて
 '(Shift+7)を2個並べたデータを登録した場合、'(Shift+7)一つしか登録されません。
例えば、
 入力: ABCD''EF
 更新結果: ABCD'EF
です。

SQLは

UPDATE e_sicgdetl
SET invno = '#f_invno#'
WHERE sigd_id = #f_sigd_id#

のように記述しています。

宜しくお願い致します。

Link | Top | Bottom

fuku3


半人前


入会日: 05/31/07

投稿数: 37

Re: '(Shift+7)の登録
01/22/09 4:21 PM

こんにちわ。

SQL文内にCFの変数からシングルクオーテーションを入れるような場合、エスケープする必要があります。

PreserveSingleQuote()関数を使うといいですよ。

UPDATE e_sicgdetl
SET invno = '#PreserveSingleQuote(f_invno)#'
WHERE sigd_id = #f_sigd_id#

Link | Top | Bottom

fatma


新米


入会日: 05/07/08

投稿数: 15

Re: '(Shift+7)の登録
01/22/09 7:20 PM

こんにちはfuku3さん

教えていただいた関数を使ったのですが、やはり、一つが削られてしまします。

残念です。 :::cry:::

Link | Top | Bottom

sussussu


長老


入会日: 05/31/07

投稿数: 153

Re: '(Shift+7)の登録
01/22/09 9:09 PM

PreserveSingleQuote(Replace(#bar#, "'", "''", "all"))

ですね。

cfqueryタグの本文中に直接記述する変数に"'"が含まれる場合、


"'"→"''"
"''"→"''"
"'''"→"''''"

というちょっと不可解なエスケープがされます。(直近の偶数個かな?)
MX6.1くらいの頃に調べたのですが、CF5では単純に二つにされるだけだったので、困りました。しかしこれは仕様の変更だったと記憶しています。

あやふやな回答で恐縮ですが、cfqueryparamを使えば発生しないと思います。

----------------
suss:::-D::ussu
----------------

Link | Top | Bottom

fatma


新米


入会日: 05/07/08

投稿数: 15

Re: '(Shift+7)の登録
01/23/09 9:32 AM

sussussuさん
ありがとうございます。cfqueryparamの使用方法を見たのですが、where句で使用するように書いてあります。すみません、私の理解が間違っているのでしょうか?
それと、ColdFusionからでなく、他のツール(Common SQL)から同じSQL分を実行してみました。結果は同じでした。ついでに、SQLクエリアナライザからも実行してみました。やはり、結果は同じでした。
と、言うことはColdFusionの問題ではないようです。

テスト

入力   結果
'ABC''' => ABC'
'ABC''''' => ABC''

と、なりました。SQL登録時は、' を別の ' で囲む必要あるようです。でも、何かいい関数が無いのですかね?

Link | Top | Bottom

katz


一人前


入会日: 05/31/07

投稿数: 140

Re: '(Shift+7)の登録
01/23/09 10:25 AM

cfqueryparamはSQLのプレイスホルダーを作るタグなので、プレイスホルダーをおける位置であればどこでも使えるはずです。

UPDATE	e_sicgdetl
SET	invno = <cfqueryparam CFSQLType="CF_SQL_VARCHAR" value="#f_invno#'>
WHERE	sigd_id = <cfqueryparam CFSQLType="CF_SQL_INTEGER" value="#f_sigd_id#">

CF_SQL_VARCHAR等はカラムの型にあわせて読み替えてください。

オリジナルのSQL文でcfqueryparamを使わない場合、
f_invnoが「', some_colum='somevalue」だった場合、some_columが意図しない値にアップデートされます。

Link | Top | Bottom

fatma


新米


入会日: 05/07/08

投稿数: 15

Re: '(Shift+7)の登録
01/23/09 11:08 AM

katzさん

おはようございます。
上手くいきました。
有難うございます。
助かりました。
:::-):: :::-D::

Link | Top | Bottom

fatma


新米


入会日: 05/07/08

投稿数: 15

Re: '(Shift+7)の登録
01/23/09 11:21 AM

sussussuさん

ありがとうございました。
私が使い方を知らなかっただけでした。
上手く行きました。

ありがとうございました。 :::-D::

Link | Top | Bottom

Next Page

1

Previous Page

新規投稿

ログイン して返信して下さい。