gpt4 book ai didi

javascript - KNEX 编译 UPDATE 查询时检测到未定义的绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 00:31:29 24 4
gpt4 key购买 nike

我正在使用 Knex 尝试更新 mySQL 表中的记录。我收到以下错误:

“UnhandledPromiseRejectionWarning:错误:编译 UPDATE 查询时检测到未定义的绑定(bind):更新购买集 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;
};

令我困惑的是,错误中提到的所有字段(名称、电子邮件、密码和purchase_id)都是在我传递给 Knex 调用的 data 对象中定义的。这是 Knex 调用之前 data 记录的内容:

{ name: 'sdfs', 
email: 'fds',
password: 'fds',
purchase_id: 39 }

我已经阅读过类似的问题(例如 KNEX Undefined binding(s) detected when compiling SELECT query ),但在这些情况下,问题似乎是 undefined variable 被传递给 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)

最佳答案

示例代码的 data 属性存在一些不一致。

let purchase_id = data.purchaseId;

上面,您将驼峰式 purchaseId 转换为蛇形式,仅用于 .where() 语句,但随后您将 data 直接传递给.update(data) 应该报告从数据库中找不到列 purchaseId

您提到的不是该错误,而是绑定(bind)未定义,这意味着您的问题在发送查询之前就已经发生了。

所以...这种情况下的问题不在所显示的代码中,而是在其他地方。请添加完整的示例如何执行并将参数传递给代码:

const update = async data => {
let purchase_id = data.purchaseId;
let result = await knex("purchases")
.where({ purchase_id })
.update(data);
return result;
};

我就能知道出了什么问题。此外,如果您使用一些自定义 wrapIndentifiers/postProcessResult 实现,这些可能是失败的原因。

关于javascript - KNEX 编译 UPDATE 查询时检测到未定义的绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53844974/

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