在node.js中使用where子句选择查询-MySQL?

时间:2018-12-20 11:16:08

标签: mysql sql node.js validation casting

这里,在此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

1 个答案:

答案 0 :(得分:2)

由于看到字符串1024wioqdwwb并将其与数据库中的int值进行比较时,查询仍然会返回一行:

因为字符串碰巧以数字开头,所以它只是简单地获取字符串中的所有字符,直到第一个非整数字符,并将其用作比较值。

换句话说,它首先将字符串截断为'1024',然后将其强制转换为整数1024,然后将其与表中的值进行比较。当然,1024与表中的ID 1024相匹配,因此这就是它仍然返回结果的原因。

您说您不希望返回该行...好了,但是为什么要允许这样的废话开始呢?我认为问题不在于查询,而在于(缺乏)对应用程序中输入值的验证。那是您需要更改代码的地方。不幸的是,我们看不到该代码,因此无法为您提供具体建议,但这是我的建议。