例子简陋,言简意赅
node中,如果要向mysql中插入文本数据,而文本中好巧不巧,如果和sql语句包裹的单双引号起冲突,那就插入不了数据,是一件非常麻烦的事。比如出现如下情况:
要插入的文本中包含奇数单引号!这样是插入不进去数据的。
(成对出现的引号不会起冲突)
那该怎么处理呢?node中没有内置的方法处理这种问题
let sql = `insert into article (title,author,time,content) values('我是文本''',"我其中包含会·引起冲突的""双引号我插入不进去",'${Date.now()}','${postData.jx}')` <----错误例子
我们用正则表达式替换一下,用我们自定义的方法替换一下字符。就ok了
function toLiteral(str) {
var dict = { '\b': 'b', '\t': 't', '\n': 'n', '\v': 'v', '\f': 'f', '\r': 'r' };
return str.replace(/([\\'"\b\t\n\v\f\r])/g, function($0, $1) {
return '\\' + (dict[$1] || $1);
});
}
let sql = `insert into article (title) values( '${ toLiteral( postData.title ) }' )`
这样插入mysql时就不会因为单双引号等字符问题失败了
此方法参考一位无名的贡献者