Javascript 如果值不为null/empty,则响应JS MySQL更新
我是react js的初学者,仅当密码和图像字段不是来自前端的空值时,我才尝试更新它们,但我得到以下错误: 错误:mysqld_stmt_execute的参数不正确 node.js脚本: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,
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=?'
...
否。我希望仅当输入表单中的字段不为空/非空时才更新这些字段。用户可以选择是否填写。如果未填写,则不得更改数据库中的原始值。