用问号代替参数是什么个写法?有没有文档中有介绍的呢?
发布于 7 年前 作者 Zzzzzzj 4657 次浏览 来自 问答

今天在写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 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

请问这种问号带参数的写法哪里可以看到文档或者说明之类的?想百度也想不到关键词没能搜出来

7 回复

@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

感谢楼上各位大佬们,问题已经解决了

回到顶部