将JSON存入MySQL失败,报列数不匹配错误求解决方案
解决MySQL插入时"Column count doesn't match value count"错误
错误原因
你直接将JavaScript对象minPrice作为参数传入db.query,mysql2会自动把对象解析为type = 'BigNumber', hex = '0x1a'这样的键值对形式,导致VALUES子句里的参数数量从4个变成了5个,和你指定的4列(tokenId,uri,minPrice,signature)数量不匹配,从而触发该错误。
解决方案
由于你的minPrice列定义为JSON类型,需要先把JavaScript对象转换为JSON字符串,再传入SQL语句。使用JSON.stringify()方法处理minPrice即可:
app.post("/api/create", (req, res) => { // 将minPrice对象转为JSON字符串 const minPrice = JSON.stringify(req.body.minPrice); const uri = req.body.uri; const tokenId = req.body.tokenId; const signature = req.body.signature; db.query("INSERT INTO Details (tokenId,uri,minPrice,signature) VALUES (?,?,?,?)", [tokenId, uri, minPrice, signature], (err, result) => { if (err) { console.log(err) } console.log(result) }); })
验证说明
修改后,minPrice会以JSON字符串形式存入数据库,符合表结构中JSON类型列的存储要求,同时参数数量和列数保持一致,即可解决报错问题。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

