2

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

假设我有这个查询

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

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

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

4

4 回答 4

4

试试这个:

SELECT * FROM `table1`
    WHERE (`column1` > @p and @condition = 1)
        or (`column1` = @p and @condition = 0)
        or (`column1` < @p and @condition = -1)
于 2012-12-11T11:28:00.003 回答
2

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

于 2012-12-11T11:24:48.680 回答
2

不幸的是,为了防止 SQL 注入,不能这样做。

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

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

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

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

于 2012-12-11T11:28:01.167 回答
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
于 2012-12-11T12:32:19.000 回答