读取数据库,查询sql

WentingLi13WentingLi13 成员职位:9学我
2020年4月编辑 帮助
我的查询sql是SELECT xxxxxx FROM table.name WHERE columnna in (?)
我想定义一个宏,用%{list}代替?
我已经尝试了%{list}值是A,执行查询成功,但是当值是A,B时,我的查询结果是空的,所以我想知道,当SQL in中有多值时,我应该使用哪个单独的字符(?)

标记:

最好的答案

  • rfuentealbarfuentealba 主持人,RapidMiner认证分析师,会员,大学教授职位:568独角兽
    2020年4月编辑 解决方案接受
    啊,你在使用参数。

    这是行不通的,因为参数是用来清理您正在创建的SQL查询的。只是使用这作为你的SQL查询:
    选择FRLOT。LOT_ID FRLOT。Lot类型来自frlot where frlot。LOT_ID IN (%{lot})
    注意,将宏作为非参数传递是一种不好的做法但是现在,在更多的帮助到来之前,我相信这是可行的。

    @BalazsBarany也许你有更好的解决办法?

    愿一切都好!

    杆。
    WentingLi13

答案

  • rfuentealbarfuentealba 主持人,RapidMiner认证分析师,会员,大学教授职位:568独角兽
    你好,@WentingLi13

    您使用的是什么数据库?使用简单的一个A、B作为你查询的一部分,没有给出任何东西,因为大多数时候一个B没有单引号意味着您正在调用一个表(这可能因数据库而异)。

    要在SELECT中使用IN宏,你应该对你的值单引号,像这样:

    “一个”、“B”



    请考虑在查询中使用自由格式数据所带来的安全隐患。如果这是一个生产系统,最终可能会使用SQL注入。

    愿一切都好!

    杆。


  • WentingLi13WentingLi13 成员职位:9学我
    rfuentealba谢谢你的回复。
    我已经试过你的方法了,但是我仍然不能得到结果,但是当我单独输入A或者B的时候,我可以得到结果,我不知道哪里出了问题:(
  • WentingLi13WentingLi13 成员职位:9学我
    2020年4月编辑
    当我这样尝试的时候,我没有得到任何结果



    当我输入一个单一的值,我可以得到结果

    这是我的查询SQL和设置宏设置



  • WentingLi13WentingLi13 成员职位:9学我
    @rfuentealba
    非常感谢你,我现在可以得到结果了,哈哈
    希望有更好的办法解决我的问题,谢谢大家!
  • rfuentealbarfuentealba 主持人,RapidMiner认证分析师,会员,大学教授职位:568独角兽
    通常我会鼓励用户在得到结果后将答案标记为已解决,但由于这不是真正解决的答案,请不要这样做。
  • WentingLi13WentingLi13 成员职位:9学我
    2020年4月编辑
    另外,我不是很清楚“将宏作为非参数传递是一种不好的做法”,你能为我解释更多吗,谢谢!
  • WentingLi13WentingLi13 成员职位:9学我
    BalazsBarany谢谢你的解释,这真的很有帮助!
  • rfuentealbarfuentealba 主持人,RapidMiner认证分析师,会员,大学教授职位:568独角兽
    2020年4月编辑
    你好@WentingLi13

    简单的解释:

    如果你有这个查询不带参数:

    SELECT title, content FROM article WHERE id = %{macro};

    宏是这样的:

    0 OR 1 = 1

    您将使软件失败,因为结果查询将是:

    查询id = 0或1 = 1的文章标题和内容

    这称为SQL注入,如果执行该查询,将从articles表中获取所有记录。不好的。

    使用如下参数化查询:

    SELECT title, content FROM article WHERE id = ?

    如果您将相同的宏作为参数传递,则结果查询将是:

    SELECT title, content FROM id = '0 or 1 = 1';

    如果您传递了一个错误的参数,最糟糕的情况就是查询不会给您任何结果。SQL注入通常是为了让您访问数据库中不应该看到的内容。想象一下,你想修改的不是文章,而是密码……参数化查询是防止这些事情发生的方法。

    就是这样。

    愿一切都好!

    杆。
  • WentingLi13WentingLi13 成员职位:9学我
    rfuentealba嗨,感谢您对参数化输入和非参数化输入的差异的解释,但在我的情况下,参数化似乎不起作用,我无法查询我需要的数据,它应该有查询结果,但我什么也没有得到…

    所以我终于明白了你昨天的意思,等待一个更好的方法来解决我的问题,再次感谢:)祝你一天愉快





登录注册置评。