将比较运算符作为参数传递给SQL查询

时间:2012-12-11 11:20:55

标签: c# .net mysql sql

是否有将比较运算符作为参数传递给MySQL查询?

假设我有这个查询

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

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

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

4 个答案:

答案 0 :(得分:3)

试试这个:

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

不幸的是,为了防止SQL注入,无法完成。

但我可以就如何做到这一点给你一个想法(解决方法):

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

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

最好使用“switch case”来进行此类操作以防止SQL注入。

答案 3 :(得分:2)

试试这个:

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