Asp Classic中SQL Server LIKE查询字符串失效,数字查询正常问题
解决ASP Classic中LIKE查询字符串无结果的问题
我看了你的代码,问题出在SQL语句的字符串拼接上,咱们一步步来修正:
1. 修复字符串拼接错误
你原来的SQL语句写法不对,导致search变量没有正确嵌入到LIKE的通配符中。VBScript里字符串连接要用&,而且要把变量从双引号包裹的SQL字符串里拆出来,正确的写法应该是:
<% strsql = "SELECT * FROM News WHERE Article_Name LIKE '%" & search & "%' ORDER BY Article_date DESC" %>
原来的写法里,'% & search & %'是作为整个字符串字面量传入SQL的,数据库其实在搜索包含& search &的内容,自然找不到你要的结果;而搜索数字时可能是巧合(比如你的Article_Name里恰好有类似字符),但本质上这个写法是错误的。
2. 更安全的做法:使用参数化查询
直接拼接用户输入到SQL里会有SQL注入的风险,推荐用ADODB.Command来做参数化查询,既安全又能避免字符串拼接的引号问题,代码示例:
<% search = Request.Form("search") Set cmd = Server.CreateObject("ADODB.Command") cmd.ActiveConnection = cn cmd.CommandText = "SELECT * FROM News WHERE Article_Name LIKE '%' + ? + '%' ORDER BY Article_date DESC" cmd.Parameters.Append cmd.CreateParameter("search", 200, 1, 255, search) ' 200对应adVarChar类型 Set rs = cmd.Execute rs.CursorLocation = 3 rs.PageSize = 4 %>
这里用?作为占位符,通过参数传递用户输入,完全避免了SQL注入风险,也不用再纠结引号拼接的问题。
3. 额外注意事项
- 确保
Article_Name字段是字符串类型(比如varchar、nvarchar),非字符串类型会导致匹配逻辑异常; - 如果需要支持中文搜索,要保证数据库字符集和ASP页面编码一致,避免乱码导致搜索不到结果。
内容的提问来源于stack exchange,提问作者Hamed Kermani
相关产品推荐
相关产品推荐

