程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> 關於ASP編程 >> asp和SQL語法中引號的使用方法

asp和SQL語法中引號的使用方法

編輯:關於ASP編程

    首先接受一個概念:asp中只承認雙引號,Access SQL中只承認單引號,HTML由於其不嚴謹,單雙引號都承認。以上是我的一點經驗總結,最終正確性還有待證實。

    在asp中,要輸出一個雙引號,需要使用轉義字符:兩個雙引號("")。
    例如,
           要輸出字符串 abc , 則 response.write("abc")
           要輸出字符串 "abc , 則 response.write("""abc")              //兩邊的雙引號括起,表示內部為一個字符串。終於剩余兩個雙引號,轉義輸出為一個雙引號。
           要輸出字符串 ab"c , 則 response.write("ab""c")
           要輸出一個雙引號 " , 則 response.write("""")              //這就是解釋了為什麼要寫四個雙引號了
    此外,還有另外一種方法,就是使用ACSII字符
    例如,
           要輸出 ab"c , 則 response.write("ab" & chr(34) & "c")


    接下來,讓我們再看看SQL中的單引號問題。我們考慮這個問題,主要是為了允許自己在進行字符串數據庫處理的時候不至於出錯,和防止SQL注入。
    來看看最簡單的SQL注入,有一個留言板,其表單有一個name項。
    在目標頁面,有如下代碼:
    <%
           name = Request.Form("name")
           Conn.Execute "Insert Into GuestBook (name) VALUES (’" & name &"’)"
    %>
    如果我們提交的name為 Jacky, 則上面的SQL語句為 Insert Into GuestBook (name) VALUES (’Jacky’),很明顯,這樣符合我們的本意。
    可是,如果我們提交的是 I’m Jacky, 則上面的語句變為 Insert Into GuestBook (name) VALUES (’I’m Jacky’), 然後,不幸的事情發生了,系統找到的第一個單引號是I’m中的單引號,於是系統認為用戶想提交的字符串(包括引號)僅僅只是’I’.接下來的 m Jacky’) 系統就無法解釋了,於是就認為你的語法錯了。
    如何解決呢?那就是再進行數據庫處理前先將一個單引號替換為兩個單引號,讓系統將其解釋為轉義字符,代碼如下:
    <%
           name = Request.Form("name")
           name = Replace(name, "’", "’’")              //即 name = Replace(name, chr(39), chr(39)&chr(39))
           Conn.Execute "Insert Into GuestBook (name) VALUES (’" & name &"’)"
    %>
    再提交 I’m Jacky, SQL語句變為 Insert Into GuestBook (name) VALUES (’I’’m Jacky’), 在寫入數據的時候,SQL會自動識別出兩個單引號的轉義字符,從而最終寫入數據庫的數據則為 I’m Jacky ,這就是我們所期待的正確結果。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved