gpt4 book ai didi

knex.js - knex.raw.query() 给出 ORDER BY 绑定(bind)错误

转载 作者:行者123 更新时间:2023-12-04 13:17:30 27 4
gpt4 key购买 nike

我通过以下方式将 order by 绑定(bind)添加到 knex 原始查询。

-- Here userIds = [1,2,3] and dataOrder='DESC'

knex.raw.query("
select from users
where userId in ?
order by created ?
",
[
userIds,
dataOrder
])

我得到这个错误说

check the manual that corresponds to your MySQL server version for the right syntax 
to use near ''DESC'' at line 1

我试过同时使用单引号和双引号的 dataOrder

最佳答案

当使用 .raw() 提供 SQL 关键字作为绑定(bind)值时,您需要通过对 knex.raw() 的另一个调用来包装该值。我们还需要处理更多的复杂性,因为数据库提供商之间没有就数组绑定(bind)达成一致。这给我们留下了这样的东西:

const dataOrder = "DESC";
const userIds = [1, 2, 3];
const userIdBindings = userIds.map(_ => "?").join(",");

knex.raw(`
SELECT * FROM users
WHERE id IN (${userIdBindings})
ORDER BY ??
?
`,
[...userIds, "created", knex.raw(dataOrder)]
)

注意双 ?? 因为这表示 identifier binding .

您可能会考虑尽可能避免使用 .raw(),因为您已经发现它很容易出错。考虑:

knex('users')
.whereIn('id', userIds)
.orderBy('created', dataOrder)

简单多了!如果您的实际查询更复杂,请随意发布:查询构建器语法可以实现大多数事情。

关于knex.js - knex.raw.query() 给出 ORDER BY 绑定(bind)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58806349/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com