討論區快速選單
知識庫快速選單
掌握Salesforce雲端管理秘訣 軟體開發過程中有哪些資安漏洞? 討論區最近新進100則主題
[ 回上頁 ] [ 討論區發言規則 ]
資料中如有 '' 在where 時會出錯的問題...!!!
更改我的閱讀文章字型大小
作者 : jamyfann(Jamy)
[ 貼文 15 | 人氣 3181 | 評價 20 | 評價/貼文 1.33 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/4/13 上午 10:11:58
ex. select * form 商品資料 where [商品編號] = '" & Z字串 & "'"

     如果 z字串中 出現 ' 會發生語法錯誤的問題....請問該如何避免.....

     (有客戶把 商品編號輸入時打入--> 張清芳 MAN'S TALK)
     (我請她輸入的字改成-----------> 張清芳 MAN`S TALK ,她死都不肯......氣......)
作者 : arios(Arios)
[ 貼文 72 | 人氣 5087 | 評價 420 | 評價/貼文 5.83 | 送出評價 10 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/4/13 上午 10:33:25

>ex. select * form 商品資料 where [商品編號] = ''' & Z字串 & '''
>
> 如果 z字串中 出現 '' 會發生語法錯誤的問題....請問該如何避免.....
>
> (有客戶把 商品編號輸入時打入--> 張清芳 MAN''S TALK)
> (我請她輸入的字改成-----------> 張清芳 MAN`S TALK ,她死都不肯......氣......)
用2個單引號試看看~~
作者 : jamyfann(Jamy)
[ 貼文 15 | 人氣 3181 | 評價 20 | 評價/貼文 1.33 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/4/13 上午 10:56:19
ON THE FIRST, THANK YOU...!!!

當新增商品編號 = MAN'S TALK 時

我會先去檢查該商品編號是否已存在....所以會下一段語法:

"SELECT 商品編號 FROM 商品資料 WHERE [商品編號] = ' " & TEXT1.TEXT & " ' "
但....如 商品編號 = MAN'S TALK 時會變成---

"SELECT 商品編號 FROM 商品資料 WHERE [商品編號] = 'MAN'S TALK' "

這下可好.....SQL 會把 'MAN' 就先截斷 而原本後面的 ' 會變成一個 [孤單老人] ,如此一來語法就不正確了....

您的方法我試過了....還是不行...!!!
作者 : aaaaaaaa(路人) SQL Language優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 271 | 人氣 11161 | 評價 1760 | 評價/貼文 6.49 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/4/13 下午 03:37:36
有考慮過在AP過濾文字有單引號的字串或者在後端用空白來取代'嗎
作者 : shiiuand(shiiuand)
[ 貼文 13 | 人氣 128 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/4/13 下午 04:10:21
>'SELECT 商品編號 FROM 商品資料 WHERE [商品編號] = ''MAN''S TALK'' '
>
>這下可好.....SQL 會把 ''MAN'' 就先截斷 而原本後面的 '' 會變成一個 [孤單老人] ,如此一來語法就不正確了....
>
>您的方法我試過了....還是不行...!!!

MAN'S TALK ==> 'MAN''S TALK '
中間那個單引號之前再加一個單引號即可,
希望可以解決你的問題
作者 : aaaaaaaa(路人) SQL Language優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 271 | 人氣 11161 | 評價 1760 | 評價/貼文 6.49 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人jamyfann註記此篇回應為很有道理 2005/4/14 上午 09:13:31
如果純在SQL寫是沒有什麼問題
SELECT * FROM TABLE WHERE A = 'MAN''S TALK'
SELECT * FROM TABLE WHERE A = 'MAN'+''''+'S TALK'
但是轉成在AP上面的語法即變成字串
我把它轉成SQL寫成字串
DECLARE @SQL NVARCHAR(4000)
SET @SQL = 'SELECT * FROM TABLE WHERE A = '+'''MAN'+'''S TALK'''
SELECT @SQL
出來的命令即是問題所在
SELECT * FROM TABLE WHERE A = 'MAN'S TALK'
'MAN'後即被截斷,造成錯誤
不知你是用什麼AP寫,我用DELPHI可以改成用傳參的方式,即沒有這個問題
不能試試用取代替代字的方試嗎?還是各位大大還有其它方式!
作者 : jamyfann(Jamy)
[ 貼文 15 | 人氣 3181 | 評價 20 | 評價/貼文 1.33 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/4/14 上午 11:35:00
感謝 a*8 大大的說明....我是用.... VB

目前的作法是在 字串元件 LOSTFOCUS 時作檢查, 如下


DIM I AS INTEGER,J AS INTEGER

I= 1
J= LEN(TEXT.TEXT)

DO
    IF MID(TEXT.TEXT,I,1) = " ' " THEN
     MsgBox "輸入的第:" + Str(i) + " 個字 ' 為系統保留字...!!!"
     TEXT.SETFOCUS
     TDBCombo1(0).SelStart = i - 1
    ENDIF
    i = i + 1
Loop Until i > J

但.....這個方法實在.....給他有點煩.....
而且要在每個字串元件 LOSTFOCUS 都得作.....!!! 真是@#$%^

再一次感謝大家...!!!
作者 : jamyfann(Jamy)
[ 貼文 15 | 人氣 3181 | 評價 20 | 評價/貼文 1.33 | 送出評價 2 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/4/14 上午 11:37:38
更正上版...!!!

DIM I AS INTEGER,J AS INTEGER

I= 1
J= LEN(TEXT.TEXT)

DO
    IF MID(TEXT.TEXT,I,1) = " ' " THEN
     MsgBox "輸入的第:" + Str(I) + " 個字 ' 為系統保留字...!!!"
     TEXT.SETFOCUS
     TEXT.SelStart = I - 1
    ENDIF
    I= I+ 1
Loop Until I> J
作者 : aaaaaaaa(路人) SQL Language優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 271 | 人氣 11161 | 評價 1760 | 評價/貼文 6.49 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/4/14 上午 11:38:54
<<如果純在SQL寫是沒有什麼問題
<<SELECT * FROM TABLE WHERE A = 'MAN''S TALK'
<<SELECT * FROM TABLE WHERE A = 'MAN'+''''+'S TALK'
<<但是轉成在AP上面的語法即變成字串
<<我把它轉成SQL寫成字串
<<DECLARE @SQL NVARCHAR(4000)
<<SET @SQL = 'SELECT * FROM TABLE WHERE A = '+'''MAN'+'''S TALK'''
<<SELECT @SQL
<<出來的命令即是問題所在
<<SELECT * FROM TABLE WHERE A = 'MAN'S TALK'
<<'MAN'後即被截斷,造成錯誤
<<不知你是用什麼AP寫,我用DELPHI可以改成用傳參的方式,即沒有這個問題
<<不能試試用取代替代字的方試嗎?還是各位大大還有其它方式!

仔細想想,或許直接把寫成字串的內容寫成
SELECT * FROM TABLE WHERE A = 'MAN''S TALK'不就得了
真是抱歉,做了一個測試如下:
CREATE TABLE #TMP(A VARCHAR(10))
INSERT #TMP VALUES('MAN''S TALK')
--直接下之語法
SELECT * FROM #TMP WHERE A = 'MAN''S TALK'
SELECT * FROM #TMP WHERE A = 'MAN'+''''+'S TALK'
--改成字串
DECLARE @SQL NVARCHAR(4000)
--在組字串時,多加上一個單引號出來即可
SET @SQL = 'SELECT * FROM #TMP WHERE A = '+'''MAN'+'''''S TALK'''
EXEC SP_EXECUTESQL @SQL
DROP TABLE #TMP

希望能有所幫助~
作者 : shiiuand(shiiuand)
[ 貼文 13 | 人氣 128 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/4/14 上午 11:59:05
抱歉 之前 可能沒看清楚,還以為跟我一樣是個新手,因為前幾天剛好在找這個,呵呵;
我是不會用dephi啦
不過我在C#用ADO.NET方法在是可行的
你在看看
string strQuery = "abc'dd";
string SQL = "select * from table where ColumnName = '"+strQuery.Replace("'","''")+"'";
strQuery.Replace("'","''") 將單引號 換成2個單引號
這樣在SQL內就會變成
select * from table where ColumnName = 'abc''dd'
希望可以解決你的問題
作者 : aaaaaaaa(路人) SQL Language優秀好手貼文超過200則人氣指數超過10000點
[ 貼文 271 | 人氣 11161 | 評價 1760 | 評價/貼文 6.49 | 送出評價 6 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/4/14 上午 11:59:41
補上!
因為使用者KEY的是MAN'S TALK
可以在AP做分解字串或都由SQL做分解字串,好像感覺越來越..複雜.....
SQL判斷TEXT有為'的方法
DECLARE @A VARCHAR(10)
SET @A = 'MAN''S TALK'
IF PATINDEX('%'+''''+'%',@A) > 0
BEGIN
PRINT @A
END

還是在AP用你的方式好像簡單又一致多了~~~
作者 : ssjama(ssjama)
[ 貼文 1 | 人氣 1 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/4/20 上午 10:23:47
分享一下
之前也碰過這個問題
就寫了一個function 來處理

ex:

Dim sName As String
sName = "MAN'S TALK"
    
strSQL = "select * from SONGDB where sName = N'" & zSQL(sName) & "' "
寫SQL語法時不論是 select 還是 insert …等,都會先呼叫 zSQL 來處理。



Function zSQL(ByVal str As String) As String
  str = Replace(str, "'", "''")
End Function
作者 : april42(april)
[ 貼文 4 | 人氣 387 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/4/24 上午 01:51:44
在ASP中,使用command 物件去執行任何SQL指令,以傳參數的方法就可以了..
作者 : april42(april)
[ 貼文 4 | 人氣 387 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/4/24 上午 01:51:51
在ASP中,使用command 物件去執行任何SQL指令,以傳參數的方法就可以了..
 板主 : 徵求中
 > SQL Server 7/2000 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - SQL Server 7/2000 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
SQL Server 7/2000
1 小朱 1540 
2 小台 1520 
3 Gordon 600 
4 ㄉ一ˊㄎㄜˋ 580 
5 路人 490 
6 max 470 
7 william 410 
8 Aries 250 
9 阿利 180 
10 羅啟章 160 
SQL Server 7/2000
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.09375