【问题标题】:How to use select with IN operator and value from variable? [duplicate]如何将 select 与 IN 运算符和变量值一起使用? [复制]
【发布时间】:2019-05-29 06:17:55
【问题描述】:

我想从城市 IN (Varberg,Falkenberg) 的“产品”表中选择所有,如果我使用下面的它可以工作,但如果我有一个变量中的城市,我不能让它工作?我正在使用一个 mySql 数据库。

sql = "SELECT * FROM products where city in ('Varberg','Falkenberg')" 
set rs = conn.Execute (sql)

所以如果我使用它,它就不起作用。

cities=request.querystring(cities)

让变量变成这样

cities="Varberg,Falkenberg"

sql = "SELECT * FROM products WHERE city IN ('"& cities &"')" 
set rs = conn.Execute (sql)

【问题讨论】:

  • 您使用的是哪个 dbms?
  • 同时标记编程语言
  • 这个问题要问多少次,已经有很多重复了。

标签: mysql sql asp-classic


【解决方案1】:

您生成的查询缺少两个引号。生成查询是

SELECT * FROM products where city in ('Varberg,Falkenberg')

而不是

SELECT * FROM products where city in ('Varberg','Falkenberg')

顺便说一句:切勿在未经验证和适当清理的情况下使用用户提供的参数。

【讨论】:

    【解决方案2】:

    使用您的变量创建的 SQL 语句将是

    SELECT * FROM products WHERE city IN ('Varberg,Falkenberg')
    

    这与您正在寻找的不同:

    SELECT * FROM products where city in ('Varberg','Falkenberg')
    

    您需要调整代码逻辑以生成正确的变量列表。由于缺少单引号,您的变量包含一个单值列表。您需要添加引号,以便变量包含多值列表。

    PS - 您的代码也对 SQL 注入开放。您应该使用参数化查询。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-10
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 2010-12-15
    • 1970-01-01
    相关资源
    最近更新 更多