ASP 多條件查詢代碼運行報錯:「FROM 子句語法錯誤」。核心原因:動態拼接 SQL 時,首個條件前缺少 WHERE 關鍵字,導致生成的 SQL 類似 SELECT * FROM reader reader_id LIKE '...',語法無效。
sql = "select * from reader"
if action1 <> "" then
sql = sql & " reader_id like '%" & action1 & "%' " // 此處直接拼接條件,缺少 WHERE
flag = 1
end if
初始化 SQL 時包含 WHERE 1=1,後續條件統一用 AND 連接,邏輯清晰且避免判斷首條件:
sql = "SELECT * FROM reader WHERE 1=1 "
if action1 <> "" then
sql = sql & " AND reader_id LIKE '%" & action1 & "%' "
end if
if action2 <> "" then
sql = sql & " AND reader_name LIKE '%" & action2 & "%' "
end if
' ... 其餘條件同理
' 執行查詢
rs.open sql, conn, 1, 1
字符串拼接極易導致 SQL 注入,強烈建議使用 ADODB.Command 參數化:
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = conn
cmd.CommandText = "SELECT * FROM reader WHERE 1=1 "
Dim params: params = ""
if action1 <> "" then
cmd.CommandText = cmd.CommandText & " AND reader_id LIKE ? "
cmd.Parameters.Append cmd.CreateParameter("p1", 200, 1, 50, "%" & action1 & "%")
end if
' ... 其他參數同理
Set rs = cmd.Execute()
if 塊。rs.State,釋放資源:If rs.State = 1 Then rs.Close。conn 應在全局或包文件中打開,頁面卸載時關閉,避免頻繁建立連接。動態 SQL 拼接務必保證 WHERE 子句完整性,採用 WHERE 1=1 技巧簡化邏輯;生產環境必須使用參數化查詢防範注入攻擊。