今天在写mysql的语句时,发现十分难写,我写的是这样的:
var str = "INSERT INTO `user`(`ID`,`USERNAME`, `PASSWORD`,`gender`,`UPADATATIME` ,`BIO`, `avatar`) VALUES (\"\","
str = str+ "\""+name+"\",";//name
str = str+ "\""+password+"\",";//pasword
str = str+ "\""+gender+"\",";//gender
str = str+ "now(),";//updatetime
str = str+ "\""+bio+"\",";//bio
str = str+ "\""+avatar+"\",";//avatar
str = str+ ";";
算是强行凑出来的SQL语句,但是我上网查到有另一种写法如下:
insert:'INSERT INTO User(uid,userName) VALUES(?,?)',
queryAll:'SELECT * FROM User',
getUserById:'SELECT * FROM User WHERE uid = ? ',
};
module.exports = UserSQL;```
当要使用的时候:
// 建立连接 增加一个用户信息
connection.query(userSQL.insert, [param.uid,param.name], function(err, result) { if(result) { result = { code: 200, msg:'增加成功' }; }
作者:sprint 链接:https://www.jianshu.com/p/0a161f341771 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
请问这种问号带参数的写法哪里可以看到文档或者说明之类的?想百度也想不到关键词没能搜出来
@foora 看到了,谢谢!
let sql="select ?,? from user where name=?" let query=(sql,arr)=>sql.split(’?’).map(s1=>s1+=arr.shift()||’’).join(’’)
来自酷炫的 CNodeMD
我说一下自己的理解吧,我之前写过类似的东西,用问号代替的目的,主要是为了防止 SQL 注入,专业名词叫绑定参数,在真正输入值的位置用 ? 作为占位符,然后将值绑定到一个数组或对象中,程序内部直接用 for 循环组合为合法 SQL 语句,但在组合时,会根据数据库的不同,使用不同的加引号方式,比如在 MySQL 中,会对值用单引号,并且将值中的单引号用 ‘’ 转义,从而防止类似阻断 SQL 的攻击。
你可以了解下sql的预编译
来自酷炫的 CNodeMD
感谢楼上各位大佬们,问题已经解决了