【问题标题】:Passing comparison operator as parameter to SQL query将比较运算符作为参数传递给 SQL 查询
【发布时间】:2012-12-11 11:20:54
【问题描述】:

有没有办法将比较运算符作为参数传递给 MySQL 查询?

假设我有这个查询

SELECT * FROM `table1` WHERE `column1` > @p

而不是>,我希望能够根据条件通过<=。我可以使用string.format(),但我希望我的查询被参数化。

而且我不想使用预定义查询,只要它们仅在一个运算符上有所不同。

【问题讨论】:

标签: c# .net mysql sql


【解决方案1】:

试试这个:

SELECT * FROM `table1`
    WHERE (`column1` > @p and @condition = 1)
        or (`column1` = @p and @condition = 0)
        or (`column1` < @p and @condition = -1)

【讨论】:

    【解决方案2】:

    MySQL 准备好的语句只支持变量的绑定值。不支持替换查询字符串的任意部分(即使是表名)。换句话说,您必须在客户端上动态构建 SQL。

    【讨论】:

      【解决方案3】:

      很遗憾,为了防止 SQL 注入,我们无法做到这一点。

      但我可以给你一个想法(解决方法):

      SELECT * FROM `table1` WHERE (`column1` > @p AND @op='>') OR (`column1` = @p AND @op='=') OR ........
      

      因此,您可以将运算符传递给代码中的@op 参数。

      这种操作最好使用“switch case”来防止SQL注入。

      【讨论】:

        【解决方案4】:

        试试这个:

        SET @MyQuery := CONCAT("SELECT * FROM table1 WHERE",@P);
        PREPARE stmt1 FROM @MyQuery;
        EXECUTE stmt1;
        DEALLOCATE PREPARE stmt1;
        

        对于@P:

        SET @P:= "> 1" OR SET @P:="=1" or other condition you need to put it
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-28
          • 1970-01-01
          • 2021-01-25
          • 1970-01-01
          • 1970-01-01
          • 2016-04-17
          • 2020-11-24
          • 1970-01-01
          相关资源
          最近更新 更多