在此API中,我使用select查询和folderid's
与要提取的记录匹配的In where子句来获取记录。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
查询仍然会返回一行,因为它看到字符串1024wioqdwwb
并将其与数据库中的int值进行比较时会发生什么:
因为字符串恰好以数字开头,所以它只是简单地获取字符串中的所有字符,直到第一个非整数字符,并将其用作比较值。
换句话说,它首先将字符串截断为'1024'
,然后将其强制转换为整数1024
,然后将其与表中的值进行比较。当然,课程1024
与1024
表中的ID相匹配,因此它仍返回结果。
您说您不希望返回该行...好吧,但是为什么要允许这样的废话开始呢?我认为问题不在于查询,而在于(缺乏)对应用程序中输入值的验证。那是您需要更改代码的地方。不幸的是,我们看不到该代码,因此无法为您提供具体的建议,但这是我的建议。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句