【问题标题】:why parameter binding not work in oder by or select statement?为什么参数绑定在 order by 或 select 语句中不起作用?
【发布时间】:2013-10-05 14:57:34
【问题描述】:

我不知道我问的问题是否正确,但我愿意测试,查询参数绑定如何工作。我测试了

string sql = select data from table where data_id =:dataId;
Session session = sessionFactory.createSQLQuery(sql);
    query.setParameter(dateId,"23456");

结果看起来

select data from table where date_id=23456;

得到结果。

但是当我尝试在 select 或 order by 中使用它时,它不起作用

    string sql = select :data from table order by :dateId
Session session = sessionFactory.createSQLQuery(sql);
query.setParameterList("data",data.split(","));
query.setParameter("dateId",dateId);

让我们考虑

data="date_Id,data";
dateId="date_id";

它的节目

将列名重复到表中的行尾

输出

row 1) date_id data
row 2) date_id data

预期输出

row 1) 234,ert
row 2) 456,jhk

谁能解释一下它的工作原理。

谢谢

【问题讨论】:

    标签: mysql hibernate hibernate-mapping


    【解决方案1】:

    您的第二个示例无法编译,因为字符串 sql 是在使用后定义的,我假设这是一个复制和粘贴错误。

    Sql 参数不是这样工作的。第二个示例生成的 sql 可能类似于

    select 'date_Id','data' from table order by 'date_Id'
    

    如果table 中有两行,将得到您所看到的输出。你需要做的就是把你自己的sql字符串放在一起:

    string sql="select " + data + " from table order by " + dateId;
    

    一个警告:当你做这样的事情时,你需要非常小心。也许有一个您检查的允许列名的白名单,并过滤掉所有不在白名单上的字符串。

    【讨论】:

    • 嗨@Matt,感谢重播,我编辑了问题,在创建会话之前对齐sql声明,我使用字符串连接解决了这个问题,但我需要知道为什么它不起作用选择或订购,请给出解释或链接以供参考..
    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多