sql - 为什么我收到此错误 val.toString is not a function?
问题描述
下面是我更新数据库字段的代码。即使没有提供所有字段,我也想更新字段。它也有一个图像。即使用户没有提供图像,我也想更新它。请帮我解决这个错误。
const updateBrand = async (req,res,next) => {
var id = req.params.id;
console.log(id)
var db = req.con;
const brand = {
"brandName" : req.body.brandName,
"sortOrder" : req.body.sortOrder,
"status" : req.body.status
}
// const updatedbrand = req.body;
if(req.files !== undefined){
const data = {
"brandName": req.body.brandName,
"sortOrder": req.body.sortOrder,
"status": req.body.status,
"brandImage": req.file.filename,
}
let result = await db.query("Update Brands set ? where BrandId=?",[data, id], function(err,rows){
if(err){
res.json({
success:0,
message:"An error occurred"
})
}
else{
res.json({
success:1,
message:"Updated"
})
}
})
}
if(req.files == undefined){
console.log("inside res")
console.log(brand)
let result = db.query("Update brands set ? where brandId=?",[res,id],function(err,rows){
if(err){
res.json({
success:0,
message:"An error occurred"
})
}
else{
res.json({
success:1,
message:"Updated"
})
}
})
}
}
我得到了这个回应 -
Server start on port : 8080
Connection established
15741804
inside res
{ brandName: 'sketcher', sortOrder: '5', status: 'Active' }
(node:10952) UnhandledPromiseRejectionWarning: TypeError: val.toString is not a function
at Object.escape (E:\coding backup\Brands\node_modules\sqlstring\lib\SqlString.js:52:33)
at Object.objectToValues (E:\coding backup\Brands\node_modules\sqlstring\lib\SqlString.js:180:89)
at Object.escape (E:\coding backup\Brands\node_modules\sqlstring\lib\SqlString.js:54:26)
at Object.format (E:\coding backup\Brands\node_modules\sqlstring\lib\SqlString.js:100:19)
at Connection.format (E:\coding backup\Brands\node_modules\mysql\lib\Connection.js:271:20)
at Connection.query (E:\coding backup\Brands\node_modules\mysql\lib\Connection.js:189:22)
at updateBrand (E:\coding backup\Brands\src\Controller\controller.js:204:25)
at Layer.handle [as handle_request] (E:\coding backup\Brands\node_modules\express\lib\router\layer.js:95:5)
解决方案
可能您打算将“品牌”或“数据”传递给 db.query() 而不是 res。所以试试“[brand, id]”或“[data, id]”。
我认为您在第二个数组中传递的参数应该有一个 toString() 方法。这是因为需要将它们嵌入到 sql 字符串中。我使用错误的堆栈跟踪提出了这个想法。sqlstring 库试图转义参数(例如防止 sql 注入),如果参数不是字符串,它必须在参数上调用 toString()。
推荐阅读
- python - 从字典中删除嵌套键
- transactions - Amazon Dynamodb 事务如何在后台工作?
- azure - 在 Azure 中创建 FTP 时,网关在指定时间段内未收到来自“Microsoft.Web”的响应
- css - 使用滚动条设置 mat-table 以使用屏幕上的剩余空间
- javascript - 正则表达式匹配包含 * 和 [.] 的电子邮件
- javascript - 为什么我从多个“if”语句中收到“无效赋值左侧”错误?
- laravel - 通过事件发送电子邮件时,Laravel 5.7 验证电子邮件的 url 错误
- solr - SolrIndexedProperty 和 SolrIndexedType 有什么区别?
- python-3.x - Python 总是打印忽略 elifs 的第一条语句
- php - SQL 注入 - PHP - 使用数据类型规范防止