请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

模糊查询防止sql注入后出错!!!!!!

模糊查询在使用escape后出现无可拯救的错误,在看到你回答别人问题列举的解决办法后我进行了尝试仍然无法解决问题,具体代码如下:

const { exec, escape } = require('../db/mysql.js')
const xss = require('xss')

const getList = (author,keyword) => {
    //先返回假数据(格式是正确的)
    author = escape(author)
    keyword = escape('%'+keyword+'%')
    let sql = `select * from blogs where 1=1 ` //1=1是为了确保在author,id没有值的情况下不会报错
    if(author{
        sql += `and author=${author} `
    }
    if(keyword) {
        sql += `and title like ${keyword} `
    }
    
    sql += `order by createtime desc;`
    //返回promise
    return exec(sql)
}

正在回答

3回答

双越 2019-04-18 08:46:36

你写了这么多内容,却忽略了一个重要的信息:无法解决问题,那到底现象是什么,或者报错信息是什么,这个得写出来。

0 回复 有任何疑惑可以回复我~
提问者 浩浩吃 2019-04-18 17:25:19

https://img1.sycdn.imooc.com//szimg/5cb842780001ed0d04840186.jpg修改好了 直接把if判断条件改为这个就可以了

0 回复 有任何疑惑可以回复我~
提问者 浩浩吃 2019-04-18 03:02:03

然后我查到只要把if(author)那个判断注释掉,老师你给的这个答案又可以查询到数据,那么我发现问题可能在于这个判断,但是我尝试了一下if(!author){}却还是会执行sql += `and author=${author} `,这是为什么??????

const { exec, escape } = require('../db/mysql.js')

const xss = require('xss')


const getList = (author,keyword) => {

//先返回假数据(格式是正确的)

author = escape(author)

keyword = escape('%'+keyword+'%')

let sql = `select * from blogs where 1=1 ` //1=1是为了确保在author,id没有值的情况下不会报错

// if(!author){

//     sql += `and author=${author} `

// }

if(keyword) {

sql += `and title like ${keyword} `

}

sql += `order by createtime desc;`

//返回promise

return exec(sql)

}


0 回复 有任何疑惑可以回复我~
  • 双越 #1
    但是我尝试了一下if(!author){}却还是会执行,这是为什么?????? —— debug 看看 author 的值就知道了。
    回复 有任何疑惑可以回复我~ 2019-04-18 08:47:18
  • 提问者 浩浩吃 回复 双越 #2
    在控制台上输出了author的值,是'',但是在if判断中却为真,将mysql.escape(author)改为author后,author还是'',但是却变回false了
    回复 有任何疑惑可以回复我~ 2019-04-18 11:23:10
  • 双越 回复 提问者 浩浩吃 #3
    在控制台上输出了author的值,是'',但是在if判断中却为真 —— 我感觉这里你应该有某些疏漏,只可能是我们人的问题,不可能是程序执行的问题。
    回复 有任何疑惑可以回复我~ 2019-04-18 11:36:58
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信