【问题标题】:Multiple values in where with prepared SQL-Statements?准备好的 SQL 语句在哪里有多个值?
【发布时间】:2010-12-13 04:10:36
【问题描述】:

有没有办法在 (My-)SQL 中使用准备好的语句选择多个值?

我正在尝试使用 IN 关键字从表中选择几行,例如:

SELECT * 
  FROM table 
 where id IN (1, 2, 3)

“1,2,3”应该作为语句的参数传递。 这是否可以使用 PHP/PDO 或者我必须连接值并将其直接插入到语句中(由于注入,我对此有一种不好的感觉)。

【问题讨论】:

标签: sql mysql sql-injection


【解决方案1】:

如果您有一个来自用户的“某事”数组,您可以使用array_fill 构建一个占位符列表,通过在数组上调用implode 生成一个类似"?, ?, ?, ..." 的字符串。或者,您可以确保数组中的所有内容都是整数(例如,使用 intval)并直接使用它来构建查询。

【讨论】:

    【解决方案2】:

    我会传入一个整数数组,然后执行 String.Join 以将它们放在您准备好的语句中。你不能将任何东西注入整数!

    【讨论】:

      【解决方案3】:

      尝试将列表中的您作为连接字符串传递并执行此操作(性能不是很好,但应该可以:我想我在某处看到了 Joel Spolsky 使用此技术的答案):

      SELECT * FROM table where concat('|',id,'|') like '%|1|2|3|%'
      

      【讨论】:

      • -1 糟糕的想法。乔尔绝不会推荐这个。如果你的 |1|2|3|价值观是动态的?
      • 现在我找到了——他得到了 28 个赞! stackoverflow.com/questions/337704/…
      • @Dave K:Joel 的回答证明人们会根据您的身份而不是提供的内容盲目投票(并接受答案)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 2020-11-13
      • 2016-03-23
      相关资源
      最近更新 更多