【发布时间】:2020-02-04 20:55:11
【问题描述】:
我最近接触了一个非常混乱的 ASP 项目。我不熟悉该语言,但在网上搜索了一段时间后,我设法学习了它,但我仍然不熟悉数据库查询等。
所以问题来了,我有这段代码可以从 MS Access 数据库文件中获取数据。我想要的是根据传递的 post/get 参数过滤这些数据。
这是我目前的代码:
sql = "SELECT * FROM tyres"
if len(brand1) > 2 then
sql = sql & " WHERE brand = '" & brand1 & "' AND application = '" & season1 & "'"
if len(brand2) > 2 then
sql = sql & " or brand = '" & brand2 & "' AND application = '" & season2 & "'"
if len(brand3) > 2 then
sql = sql & " or brand = '" & brand3 & "' AND application = '" & season3 & "'"
if len(brand4) > 2 then
sql = sql & " or brand = '" & brand4 & "' AND application = '" & season4 & "'"
if len(brand5) > 2 then
sql = sql & " or brand = '" & brand5 & "' AND application = '" & season5 & "'"
set Dataconn = Server.CreateObject("ADODB.Connection")
Dataconn.Open "database-in"
set DataTable = Server.CreateObject("ADODB.recordset")
DataTable.Open sql, Dataconn
而且它似乎不起作用。请注意,用户最多可以插入 5 个(如您所见)不同的参数,以便在数据库中搜索产品。因此,如果您对如何使这项工作有任何进一步的信息,请随时提出建议。
【问题讨论】:
-
恐怕你需要扔掉你的代码。 从不通过连接字符串来构建 SQL 语句。这样做最多会导致运行时错误和错误,最坏的情况是 SQL 注入攻击。
-
另一个观察结果是您计算了变量名称(
brand1..brandN和season1..seasonN)。这意味着您实际上需要一个名为brand和season的数组。显示当前如何创建这些变量。 -
@Tomalak 好吧,实际上有点复杂。我希望每个都是一个单独的结果数组。例如,我想获得基于品牌 1 和季 1 的结果,然后是品牌 2 和季 2 等,而不是相互混合
-
这根本不是问题。但首先你真的需要摆脱计数变量和随之而来的代码重复。
-
@Tomalak 你是什么意思?我有 5 个不同的输入,它们将过滤数据
标签: sql database ms-access asp-classic adodb