gpt4 book ai didi

mysql - KnexJS 使用列数组 : "Unhandled rejection Error: ER_BAD_FIELD_ERROR: Unknown column"

转载 作者:行者123 更新时间:2023-11-28 23:29:00 25 4
gpt4 key购买 nike

我们在 knex 中使用列名数组:

    knex
.select( ["rowid", "accountid", "accountname"] )
.from("account")
.then(function (e, rows) {
callback(e, rows)
})

出现以下错误:

select `rowid,accountid,accountname` from `account`

Unhandled rejection Error: ER_BAD_FIELD_ERROR: Unknown column 'rowid,accountid,accountname' in 'field list'

显然,列名数组已转换为导致错误的字段字符串。使用个别字段可以正常工作:

    knex
.select( "rowid", "accountid", "accountname" )
.from('account')
.then(function (e, rows) {
callback(e, rows)
})

这是一个已知问题吗?是否有将数组与“选择”功能一起使用的解决方法?

最佳答案

我使用 knex 0.9.0 进行了测试,它接受了 select 的数组参数而没有提示:

knex.
select(['c1','t1','c2']).
from('sample').
then(function(rows) {
console.dir(rows);
});
// console.dir output:
// [ { c1: 22, t1: 'xx', c2: 33 },
// { c1: 422, t1: 'xxxx', c2: 77 } ]

您可能已经注意到您的示例无论如何都有问题,then() 不遵循常见的回调错误优先样式 (callback(error, result)) 但是相反:then(success_callback, failure_callback),bluebird 提供了一个方便的方法 catch() 来避免调用失败。因此,您可以将代码更改为:

knex
.select( ["rowid", "accountid", "accountname"] )
.from('account')
.then(function (rows) {
callback(null, rows)
})
.catch(function (e) {
callback(e, null);
});

如果您仍然碰巧使用不允许列名数组的 knex 版本,您可以将直接调用替换为 .apply() 调用,例如:

knex
.select.apply(knex, ["rowid", "accountid", "accountname"] )
.from('account')
.then(function (rows) {
callback(null, rows)
})
.catch(function (e) {
callback(e, null);
});

关于mysql - KnexJS 使用列数组 : "Unhandled rejection Error: ER_BAD_FIELD_ERROR: Unknown column",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38021405/

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