你是否需要围绕Mysql参数括号以防止sql注入?

时间:2017-02-11 20:49:53

标签: mysql node.js

我正在使用nodejs和mysql npm包,我试图从一个表中选择other_text =

这是它的样子:

var query = connection.query(`SELECT id FROM ${tableName} WHERE other_text = ?`,
    attributeName.other_text, function (err, rows) {
    ...

我看过那个使用?将自动转义用户输入的字符串。在我看到的大多数示例中,它们在查询函数的第二个参数周围都有括号,如下所示:

var query = connection.query(`SELECT id FROM ${tableName} WHERE other_text = ?`,
    [attributeName.other_text], function (err, rows) {
    ...

是否需要括号以逃避传入的字符串?它在我尝试时起作用,但我甚至不知道如何测试SQL注入,所以我不知道括号是否必要或甚至是正确的。

谢谢。

1 个答案:

答案 0 :(得分:1)

括号代表一个数组。如果您想要在查询中使用更多值,则可以使用数组。

例如,假设您要从表中选择多个列,并且希望将它们传递给语句,您可以使用以下内容:

connection.query(`SELECT ?? FROM ${tableName}`,
[col1, col2, col3], function (err, rows) {

它也可以与字符串,数字甚至对象结合使用。假设您要从Users表表更新ID为1的用户。你会做这样的事情:

const tableName = 'users';
const whereCondition = {id: 1};
const whaToUpdate = {name: 'newName'}
const mysql = require('mysql');
const statement = mysql.format('update ?? set ? where ?', [tableName, whaToUpdate , whereCondition]);

我还建议使用.format来更好地阅读代码。 最后你会有这样的事情:

connection.query(statement, (error, result, fields) => { });