【发布时间】:2018-12-19 15:09:52
【问题描述】:
我正在使用 Knex 尝试更新 mySQL 表中的记录。我收到以下错误:
“UnhandledPromiseRejectionWarning:错误:编译更新查询时检测到未定义的绑定:更新购买集name = ?, email = ?, password = ?, purchase_id = ? 其中purchase_id = ?”
违规代码是:
const update = async data => {
let purchase_id = data.purchaseId;
let result = await knex("purchases")
.where({ purchase_id })
.update(data);
return result;
};
让我感到困惑的是,错误中提到的所有字段(名称、电子邮件、密码和购买 ID)都是在我传递给 Knex 调用的 data 对象中定义的。这是data 在 Knex 调用之前记录的内容:
{ name: 'sdfs',
email: 'fds',
password: 'fds',
purchase_id: 39 }
我已经阅读了类似的问题(例如 KNEX Undefined binding(s) detected when compiling SELECT query ),但在这些情况下,问题似乎是未定义的变量正在传递给 KNEX,而对我来说似乎并非如此。
我可能做错了什么?
这是我的表格描述:
mysql> describe purchases;
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| purchase_id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | YES | | NULL | |
| email | varchar(100) | YES | | NULL | |
| password | varchar(100) | YES | | NULL | |
| address_1 | varchar(150) | YES | | NULL | |
| address_2 | varchar(150) | YES | | NULL | |
| city | varchar(50) | YES | | NULL | |
| state | varchar(30) | YES | | NULL | |
| zip_code | varchar(15) | YES | | NULL | |
| phone | varchar(15) | YES | | NULL | |
| cc_number | int(11) | YES | | NULL | |
| cc_expiration | varchar(10) | YES | | NULL | |
| cc_cvv | int(11) | YES | | NULL | |
| billing_zip | varchar(15) | YES | | NULL | |
+---------------+--------------+------+-----+---------+----------------+
14 rows in set (0.06 sec)
【问题讨论】:
-
我很确定问题出在此问题中未显示的代码中的其他地方。请显示
.toSQL()从knex("purchases") .where({ purchase_id }) .update(data).toSQL()打印出来的内容,如果您可以添加完整的可运行示例代码,则很容易判断问题出在哪里。
标签: javascript node.js knex.js