一尘不染

将变量插入节点mysql的SQL查询中

sql

在维基节点mysql的,我注意到变量(样)插入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对象,该对象可用于流式处理传入的行数据。


阅读 170

收藏
2021-03-08

共1个答案

一尘不染

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

即使在性能选项2中也可能更快一些。

但是 :表名不能使用进行转义,?所以不要去那里。只要确保用户不能手动输入表名,您就可以免受黑客的攻击。

-编辑-

您为什么仍要使表名可变?

2021-03-08