在这个API中,我使用select查询获取记录,在where子句中,folderid's匹配我想要获取的记录。req.body.folderid is 1024wioqdwwb,但是在文件夹表folderid is 1024中,所以该记录是被取来的,但是我不想要那个记录。folderid datatype is int
app.post('/getFolderDetails',function(req,res){
console.log(req.body.folderid); //1024wioqdwwb
connection.query("SELECT folderid,folderName FROM folder WHERE folderid = ?", [req.body.folderid] , function (error, results, fields) {
console.log(results); // [ RowDataPacket { folderid: 1024, folderName :'folder-1' } ]
res.send({
'status':'1',
'success':'true',
'payload': results,
});
});
})文件夹表
folderid folderName
1024 folder-1
1025 folder-2
1026 folder-3
1027 folder-4发布于 2018-12-20 11:30:35
查询仍然返回一行,因为当它看到字符串1024wioqdwwb并将其与DB中的int值进行比较时会发生什么:
因为字符串碰巧以数字开头,所以它只需从字符串中提取所有字符,直到第一个非整数字符,并使用它作为比较值。
换句话说,它首先将字符串截断为'1024',然后将其转换为整数1024,然后将其与表中的值进行比较。当然,1024与表中的id 1024匹配,所以它仍然返回一个结果。
你说你不想要这个行returned...ok,但是你为什么一开始就允许这样的无意义的输入?我认为问题不在于查询,而在于应用程序中输入值的验证(缺乏)。这就是你需要修改代码的地方。不幸的是,我们看不到代码,所以我们不能给您具体的建议,但这将是我的建议。
https://stackoverflow.com/questions/53867594
复制相似问题