读取数据库,查询sql
WentingLi13
成员职位:9学我
我的查询sql是SELECT xxxxxx FROM table.name WHERE columnna in (?)
我想定义一个宏,用%{list}代替?
我已经尝试了%{list}值是A,执行查询成功,但是当值是A,B时,我的查询结果是空的,所以我想知道,当SQL in中有多值时,我应该使用哪个单独的字符(?)
我想定义一个宏,用%{list}代替?
我已经尝试了%{list}值是A,执行查询成功,但是当值是A,B时,我的查询结果是空的,所以我想知道,当SQL in中有多值时,我应该使用哪个单独的字符(?)
0
最好的答案
-
rfuentealba 主持人,RapidMiner认证分析师,会员,大学教授职位:568独角兽啊,你在使用参数。
这是行不通的,因为参数是用来清理您正在创建的SQL查询的。只是使用这作为你的SQL查询:
选择FRLOT。LOT_ID FRLOT。Lot类型来自frlot where frlot。LOT_ID IN (%{lot})
注意,将宏作为非参数传递是一种不好的做法但是现在,在更多的帮助到来之前,我相信这是可行的。
@BalazsBarany也许你有更好的解决办法?
愿一切都好!
杆。1 -
BalazsBarany 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家职位:913独角兽嗨!
我不会说在每种情况下传递宏值是一种非常糟糕的做法,但它可能导致SQL注入攻击。如果您控制流程的输入,并使用对数据库的只读访问,就不会发生很多糟糕的事情。
如果您有一个具有指定格式的动态参数列表,并且希望使用准备好的查询?作为参数占位符,您可以自己拆分它们。不幸的是,此功能依赖于数据库。
在Postgres中,你会这样做:
输入为(select regexp_split_to_table(' 1,2,3,4 ', ', *') as param)从输入中选择param
这里你可以使用WHERE value IN (SELECT param FROM inputs),你可以通过“1、2、3、4”价值?参数。这种设置确保格式和数据类型是正确的,并避免SQL注入的危险。
问候,
Balazs6
答案
您使用的是什么数据库?使用简单的一个或A、B作为你查询的一部分,没有给出任何东西,因为大多数时候一个和B没有单引号意味着您正在调用一个表(这可能因数据库而异)。
要在SELECT中使用IN宏,你应该对你的值单引号,像这样:
“一个”、“B”
请考虑在查询中使用自由格式数据所带来的安全隐患。如果这是一个生产系统,最终可能会使用SQL注入。
愿一切都好!
杆。
我已经试过你的方法了,但是我仍然不能得到结果,但是当我单独输入A或者B的时候,我可以得到结果,我不知道哪里出了问题
当我输入一个单一的值,我可以得到结果
这是我的查询SQL和设置宏设置
非常感谢你,我现在可以得到结果了,哈哈
希望有更好的办法解决我的问题,谢谢大家!
简单的解释:
如果你有这个查询不带参数:
宏是这样的:
您将使软件失败,因为结果查询将是:
这称为SQL注入,如果执行该查询,将从articles表中获取所有记录。不好的。
使用如下参数化查询:
如果您将相同的宏作为参数传递,则结果查询将是:
如果您传递了一个错误的参数,最糟糕的情况就是查询不会给您任何结果。SQL注入通常是为了让您访问数据库中不应该看到的内容。想象一下,你想修改的不是文章,而是密码……参数化查询是防止这些事情发生的方法。
就是这样。
愿一切都好!
杆。
所以我终于明白了你昨天的意思,等待一个更好的方法来解决我的问题,再次感谢祝你一天愉快