是否有将比较运算符作为参数传递给MySQL查询?
假设我有这个查询
SELECT * FROM `table1` WHERE `column1` > @p
而不是>
我希望能够根据条件传递<
或=
。我可以使用string.format()
,但我希望我的查询能够参数化。
我不想使用预定义的查询,只要它们只在一个运算符中有所不同。
答案 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