在node-mysql的wiki中,我注意到变量(种类)以两种不同的方式插入到SQL查询中,一种是通过在查询字符串的中间插入变量,另一种是通过将?
放入查询字符串中,并在下一个参数中的数组中定义这些?
的值。替换查询中?
的值将被转义。
有什么区别,什么时候应该使用一个而不是另一个? (如果我们希望表名是变量,它是否应该被转义?)
维基代码
client.query(
'INSERT INTO '+TEST_TABLE+' '+
'SET title = ?, text = ?, created = ?',
['super cool', 'this is a nice text', '2010-08-16 10:00:23']
);
Wiki链接:https://github.com/felixge/node-mysql
Wiki提取:
向服务器发送sql查询。 '?'字符可以用作一系列参数的占位符,这些参数将在发送最终查询之前安全地转义。
此方法返回一个Query对象,该对象可用于传输传入的行数据。
答案 0 :(得分:3)
始终支持选项2,因为它们是SQL注入证明。选项1将使您的网站在5分钟内被黑客攻击,而黑客将很难打破选项2。
即使在性能方面,选项2可能会快一点。
然而:无法使用?
转义表名,所以不要去那里。只需确保用户无法手动输入表名,您就可以免受黑客攻击。
-edit -
为什么要让表名变量呢?