簡體   English   中英

asp db收到“ SELECT * FROM people where ID =”和Request.QueryString(“ id”)

[英]asp db receive “SELECT * FROM people WHERE id =” & Request.QueryString(“id”)

我在無法工作的ASP文件中編寫了代碼

Set Conn = Server.CreateObject("ADODB.Connection")         
Conn.Open "Provider=Microsoft.Jet.Oledb.4.0; Data Source=" & Server.MapPath("dbbb.mdb")
Dim strSQL  
Dim strSQL  
strSQL = "SELECT * FROM people WHERE id =" & Request.QueryString("id")
Set rs = Conn.Execute(strSQL)

我收到的消息是:

Microsoft JET數據庫引擎錯誤'80040e14'

查詢表達式“ id =”中的語法錯誤(缺少運算符)。

/testAsp/test3/continue/person.asp,第26行

我做了很多嘗試,仍然無法解決問題所在? (是的,我在這個領域是菜鳥)

請幫忙

ps我可以通過輸入num而不是Request.QueryString("id")來接收特定的ID

您的ID字段通常會在尋找數字值。 因此,在執行數據庫查詢之前,應檢查QueryString Request是否確實包含數字。 這是我的工作,它也可以防止sql注入。 創建變量ID並為其分配查詢字符串的值。 檢查ID值不為空,並且實際上是數字“ IsNumeric()”,然后僅當這兩個都為true時,才執行數據庫查找。 NB。 不要忘記關閉記錄集和連接並將它們設置為Nothing。

Dim ID
ID = Request.QueryString("id")
If ID <> "" And IsNumeric(ID) Then

    Set Conn = Server.CreateObject("ADODB.Connection")         
    Conn.Open "Provider=Microsoft.Jet.Oledb.4.0; Data Source=" & Server.MapPath("dbbb.mdb")
    Dim strSQL 
    strSQL = "SELECT * FROM people WHERE id =" & ID
    Set rs = Conn.Execute(strSQL)

    ' DO YOUR BUSINESS '

    rs.Close()
    Set rs = Nothing
    Conn.Close()
    Set Conn = Nothing
Else
    If ID = "" Then
        Response.Write("ID is missing from the URL")
    ElseIf Not IsNumeric(ID) Then
        Response.Write("ID is NOT a number")
    End If
End If

我相信QueryString(除非另外進行強制轉換)在默認情況下將是字符串。 根據您的查詢,您無法說出id = string的位置,它必須是id ='string',或將您的querystring參數轉換為int。

此外,正如注釋中所述,您應該按原樣進行SQL注入,以便對查詢進行參數化。

這里最可能的問題是您沒有為id QueryString值處理空值。 執行代碼以從數據庫讀取數據之前,請嘗試檢查id字段。

正如其他人指出的那樣,請謹慎對待SQL注入攻擊。 始終使用參數,或者如果您希望繼續使用嵌入式SQL,請考慮:

id = Replace(Request.QueryString("id"), "'", "''")

-編輯-

另外,根據Barry Dowd的帖子,如上例所示,更多的是基於字符的字段和日期(和時間)字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM