MySql中escape适用场景及其作用

前提:mysql中通配符' _ '与' % '分别代表任意一个字符和任意多个字符

作用:查询包含字符' _ '或' % '的字段时,通过escape后面字符转义' _ '或' % '不作为通配符使用

示例:

转义前:
select * from user where user_name like '_hello'; # 第一个字符作为通配符匹配以任意一个字符开头

转义后:
select * from user where user_name like '/_hello' escape '/'; # 声明/之后的字符不做为通配符使用

 

转自:https://www.cnblogs.com/leizia/p/14327958.html

 

以下实际处理 取用户账号密码 转义的demo

db>mysql.js   看红色标记

const mysql = require('mysql')
const { MYSQL_CONF } = require('../conf/db')

// 创建链接对象
const con = mysql.createConnection(MYSQL_CONF)

// 开始链接
con.connect()
console.log("node 链接mysql成功。。。。。")

// 统一执行 sql 的函数
function exec(sql) {
    // const promise = new Promise((resolve, reject) => {
    //     con.query(sql, (err, result) => {
    //         if (err) {
    //             reject(err)
    //             return
    //         }
    //         resolve(result)
    //     })
    // })
    // return promise
    
    return new Promise((resolve, reject)=>{
            con.query(sql, (err, result) => {
                if (err) {
                    reject(err)
                    return
                }
                resolve(result)
            })
    })
}

module.exports = {
    exec,
    escape: mysql.escape
}

controller>user.js

const { exec, escape } = require('../db/mysql')
const { genPassword } = require('../utils/cryp')

const login = (username, password) => {
    username = escape(username)
    
    // 生成加密密码
    password = genPassword(password)
    password = escape(password)

    const sql = `
        select username, realname from users where username=${username} and password=${password}
    `
    // console.log('sql is', sql)
    return exec(sql).then(rows => {
        return rows[0] || {}
    })
}

module.exports = {
    login
}

 

posted @ 2021-07-01 15:19  呆呆的射手座  阅读(1339)  评论(0)    收藏  举报