首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在node.js - mysql中选择子句?

在node.js - mysql中选择子句?
EN

Stack Overflow用户
提问于 2018-12-20 11:16:07
回答 1查看 3.7K关注 0票数 1

在这个API中,我使用select查询获取记录,在where子句中,folderid's匹配我想要获取的记录。req.body.folderid is 1024wioqdwwb,但是在文件夹表folderid is 1024中,所以该记录是被取来的,但是我不想要那个记录。folderid datatype is int

代码语言:javascript
复制
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,
   });      
 });
})

文件夹表

代码语言:javascript
复制
folderid    folderName
 1024         folder-1
 1025         folder-2
 1026         folder-3
 1027         folder-4
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-20 11:30:35

查询仍然返回一行,因为当它看到字符串1024wioqdwwb并将其与DB中的int值进行比较时会发生什么:

因为字符串碰巧以数字开头,所以它只需从字符串中提取所有字符,直到第一个非整数字符,并使用它作为比较值。

换句话说,它首先将字符串截断为'1024',然后将其转换为整数1024,然后将其与表中的值进行比较。当然,1024与表中的id 1024匹配,所以它仍然返回一个结果。

你说你不想要这个行returned...ok,但是你为什么一开始就允许这样的无意义的输入?我认为问题不在于查询,而在于应用程序中输入值的验证(缺乏)。这就是你需要修改代码的地方。不幸的是,我们看不到代码,所以我们不能给您具体的建议,但这将是我的建议。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53867594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档