[英]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.