这里,在此API中,我使用select查询和folderid's
与要获取的记录匹配的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
答案 0 :(得分:2)
由于看到字符串1024wioqdwwb
并将其与数据库中的int值进行比较时,查询仍然会返回一行:
因为字符串碰巧以数字开头,所以它只是简单地获取字符串中的所有字符,直到第一个非整数字符,并将其用作比较值。
换句话说,它首先将字符串截断为'1024'
,然后将其强制转换为整数1024
,然后将其与表中的值进行比较。当然,1024
与表中的ID 1024
相匹配,因此这就是它仍然返回结果的原因。
您说您不希望返回该行...好了,但是为什么要允许这样的废话开始呢?我认为问题不在于查询,而在于(缺乏)对应用程序中输入值的验证。那是您需要更改代码的地方。不幸的是,我们看不到该代码,因此无法为您提供具体建议,但这是我的建议。