mysql语句中ORDER BY列不能参数化

sortfields={
    0:"hostname",
    1:"lasttime",
    2:"vendor",
    3:"softname",
    4:"softversion",
    5:"filename",
    6:"fileversion",
    7:"sha1",
    8:"out_ip",
    9:"os",
    10:"manufacturer",
    11:"kernel",
    12:"username"          #指的用户那列,用户名不用排序
}
reverses={
    0:"ASC",
    1:"DESC"
}


sql="select a.deviceid,a.username,a.types,a.userpri,a.chpswtime,a.last_login_time,a.clients,h.hostname from `{db}`.account a left join `{db}`.hostinfo h on (a.deviceid = h.deviceid) where INSTR(a.username,%s) and INSTR(h.hostname,%s) and (a.last_login_time >%s and a.last_login_time <%s) order by %s %s limit %s,%s;".format(db=company)
results = conn.execute(sql, (username,hostname,firsttime,lastttime,sortfields[sortedby],reverses[reversed],postion, count)).fetchall()

改成下面就可以了:

sql="select a.deviceid,a.username,a.types,a.userpri,a.chpswtime,a.last_login_time,a.clients,h.hostname from `{db}`.account a left join `{db}`.hostinfo h on (a.deviceid = h.deviceid) where INSTR(a.username,%s) and INSTR(h.hostname,%s) and (a.last_login_time >%s and a.last_login_time <%s) order by {sorts} {reverses} limit %s,%s;".format(db=company,sorts=sortfields[sortedby], reverses=reverses[reversed])
results = conn.execute(sql, (username,hostname,firsttime,lastttime,postion, count)).fetchall()

使用参数化的order by后面的字段为"字段",而我们排序需要的是字段,不带引号的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值