我有一个从数据库更新用户的服务方法:

const updateUser = async (user) => {
    const {firstName, lastName, email, password, phone, dob, countryid, gender, address, role, id} = user;
    const sql = `UPDATE user set user_firstName = ?, user_lastName = ?, user_email = ?, user_password = ?, user_phoneNumber = ?, user_dob= ?, user_countryId = ?, user_gender = ?, user_address = ?, user_role= ? WHERE client_id = ?`;
    try {
        await db.query(sql, [firstName, lastName, email, password, phone, dob, countryid, gender, address, role, id]);
        return { message: "records updated successfully." }
    } catch (error) {
        return { message: "Failed to updated" }
    }
}

每当我单独登录用户时,它都可以读取它,但它没有读取任何其他属性(FirstName等),并收到以下错误:绑定参数不得包含未定义的.要传递SQL NULL,请指定JS NULL.

console.log(user)预览版:

enter image description here

我的路由工作得很好,同样的功能以前也用过,没有任何问题

推荐答案

您打印输出的user参数不是表示用户的对象,而是一个只有一个这样的元素的array.此外,对象本身没有您试图使用的firstNamelastName属性,它有firstnamelastname(请注意小写的n).因为他们不在那里,所以他们得到undefined个值

假设您打算将一个数组传递给该函数,那么您可能应该遍历所有用户并更新每个用户.关于属性,如果将firstNamelastName分别替换为firstnamelastname,则应该可以:

const updateUser = async (users) => {
    users.forEach(user => {
        const {firstname, lastname, email, password, phone, dob, countryid, gender, address, role, id} = user; // Here
        const sql = `UPDATE user set user_firstName = ?, user_lastName = ?, user_email = ?, user_password = ?, user_phoneNumber = ?, user_dob= ?, user_countryId = ?, user_gender = ?, user_address = ?, user_role= ? WHERE client_id = ?`;
        try {
            await db.query(sql, [firstname, lastname, email, password, phone, dob, countryid, gender, address, role, id]); // And here!
            return { message: "records updated successfully." }
        } catch (error) {
            return { message: "Failed to updated" }
        }
    }
});

Mysql相关问答推荐

MySQL逻辑全部

MySQL Group by或Distinct in Window函数

MySQL grant语句中的用户名区分大小写

布尔值之间的 SQL less/greater 比较会产生意外结果

为什么我的 SQL 查询不更新 Node.js 和 MySQL 中用户以外的用户属性?

按优先级 for each 具有 status_id 的员工 Select 单行

完全匹配 IN 子句中的所有值

MySQL 在第一个匹配行后停止搜索 N 行(不是 LIMIT)

我在 mysql 查询中需要帮助,我想在年龄之间按年龄过滤器分组,并显示 0 计数之间找不到的数据

检索按键列值分组的最新日期 (MySql)

创建将列与多个值进行比较的索引

MySQL 1292 截断不正确的日期时间值:'2020-09-11T08:32-50Z'

MySQL表中给定字段的每个不同值的连续记录形成对

Facebook user_id:big_int、int 还是 string?

在 PHP 中获取 MySQL 列的总和

如何在 MySQL 上一次删除一系列记录?

第 1 行的 CSV 输入中的列数无效错误

在网页的 HTML 表中显示 MySQL 数据库表中的值

电话号码和地址的mysql数据类型

我在哪里可以下载 mysql jdbc jar?