Javascript 如果值不为null/empty,则响应JS MySQL更新

Javascript 如果值不为null/empty,则响应JS MySQL更新,javascript,mysql,node.js,Javascript,Mysql,Node.js,我是react js的初学者,仅当密码和图像字段不是来自前端的空值时,我才尝试更新它们,但我得到以下错误: 错误:mysqld_stmt_execute的参数不正确 node.js脚本: async updateUser(req, res) { const { id } = req.params; const { fullname, CPF, RG, born,

我是react js的初学者,仅当密码和图像字段不是来自前端的空值时,我才尝试更新它们,但我得到以下错误:

错误:mysqld_stmt_execute的参数不正确

node.js脚本:

async updateUser(req, res) {

        const { id } = req.params;

        const {
            fullname,
            CPF,
            RG,
            born,
            email,
            phone,
            password,
            level, 
            city, 
            cityHallState } = req.body;

        let image;
        if (req.files.length > 0) {
            image = req.files[0].filename;
        } else {
            image = '';
        }

        let created = new Date();

        let date = ("0" + created.getDate()).slice(-2);
        let month = ("0" + (created.getMonth() + 1)).slice(-2);
        let year = created.getFullYear();
        let hours = created.getHours();
        let minutes = created.getMinutes();
        let seconds = created.getSeconds();

        let updatedAt = year + "-" + month + "-" + date + " " + hours + ":" + minutes + ":" + seconds;

        try {

            await conn.execute('UPDATE register SET fullname = ?, CPF = ?, RG = ?, born = ?, email = ?, phone = ?, city = ?, state = ?, password = CASE WHEN ? IS NOT NULL AND LENGTH(?) > 0 THEN ? ELSE password END, image = CASE WHEN ? IS NOT NULL AND LENGTH(?) > 0 THEN ? ELSE image END, level = ?, updated = ? WHERE id = ?',
                [fullname, CPF, RG, born, email, phone, city, cityHallState, password, image, level, updatedAt, id],
                function (err, results, fields) {

                    console.log('register errors: ' + err);
                    console.log(results);

                    if (err == null) {
                        if (results.affectedRows > 0) {
                            return res.json('user updated');
                        } else {
                            return res.json('could not update user data');
                        }
                    } else {
                        return res.json('error updating user data: ' + err);
                    }
                });
        } catch (error) {
            return res.json('could not update user data. catch error: ' + error);
        }
}

如果删除密码和图像字段,查询将正常执行。我做错了什么?

如果长度大于0,是否尝试将默认值设置为字符串
'password'
'image'
?如果是这样,您可能需要在以下内容周围加上单引号:

UPDATE register
SET fullname = ?,
    CPF = ?,
    RG = ?,
    born = ?,
    email = ?,
    phone = ?,
    city = ?,
    state = ?,
    password = CASE WHEN ? IS NOT NULL AND LENGTH(?) > 0 THEN ? ELSE 'password' END,
    image = CASE WHEN ? IS NOT NULL AND LENGTH(?) > 0 THEN ? ELSE 'image' END,
    level = ?,
    updated = ?
WHERE id = ?'
您还可以通过完全删除case语句并在javascript中为
password
image
设置默认值来清理查询:

async updateUser(请求、恢复){
const{id}=req.params;
常数{
全名,
中央公积金,
RG,
出生的,
电子邮件,
电话,
密码='password',
水平,
城市
cityHallState}=req.body;
让image='image';
如果(req.files.length>0){
image=req.files[0]。文件名;
}
...
试一试{
wait conn.execute('UPDATE register SET fullname=?,CPF=?,RG=?,born=?,email=?,phone=?,city=?,state=?,password=?,image=?,level=?,updated=?其中id=?'
...

否。我希望仅当输入表单中的字段不为空/非空时才更新这些字段。用户可以选择是否填写。如果未填写,则不得更改数据库中的原始值。