KNEX编译UPDATE查询时检测到未定义的绑定

时间:2018-12-19 05:15:42

标签: javascript node.js knex.js

我正在使用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 }

1 个答案:

答案 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实现,则可能是失败的原因。