将变量插入到node-mysql的SQL查询中

时间:2011-11-29 20:44:27

标签: mysql sql node.js

在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对象,该对象可用于传输传入的行数据。

1 个答案:

答案 0 :(得分:3)

始终支持选项2,因为它们是SQL注入证明。选项1将使您的网站在5分钟内被黑客攻击,而黑客将很难打破选项2。

即使在性能方面,选项2可能会快一点。

然而:无法使用?转义表名,所以不要去那里。只需确保用户无法手动输入表名,您就可以免受黑客攻击。

-edit -

为什么要让表名变量呢?