我正在使用Knex尝试更新mySQL表中的记录。我收到以下错误:
“ UnhandledPromiseRejectionWarning:错误:编译UPDATE查询时检测到未定义的绑定:更新购买集name
=?,email
=?,password
=?,{{1} } =?其中purchase_id
=?“
有问题的代码是:
purchase_id
令我困惑的是,错误中提到的所有字段(名称,电子邮件,密码和purchase_id)都在我传递给Knex调用的const update = async data => {
let purchase_id = data.purchaseId;
let result = await knex("purchases")
.where({ purchase_id })
.update(data);
return result;
};
对象中定义。 data
即将在Knex调用之前记录到以下内容:
data
我已经阅读了类似的问题(例如 KNEX Undefined binding(s) detected when compiling SELECT query ),但是在那些情况下,问题似乎是未定义的变量正在传递给KNEX,而对我而言似乎并非如此。 / p>
我可能做错了什么?
这是我的桌子说明:
{ name: 'sdfs',
email: 'fds',
password: 'fds',
purchase_id: 39 }
答案 0 :(得分:1)
示例代码在data
属性中存在一些不一致之处。
let purchase_id = data.purchaseId;
上面您仅将purchaseId
语句的驼峰大小写.where()
转换为蛇形大小写,但是随后您将data
直接传递给.update(data)
,后者应报告该列{{ 1}}从数据库中找不到。
您提到的不是绑定错误,而是绑定为purchaseId
,这意味着您的问题已经在发送查询之前发生。
所以...在这种情况下,问题不在所显示的代码中,而在其他地方。请添加完整的示例,说明如何执行参数并将其传递给代码:
undefided
,我就能分辨出什么地方出了问题。另外,如果您使用一些自定义的const update = async data => {
let purchase_id = data.purchaseId;
let result = await knex("purchases")
.where({ purchase_id })
.update(data);
return result;
};
/ wrapIndentifiers
实现,则可能是失败的原因。