2017-02-11 69 views
0

我使用的NodeJS和MySQL NPM包,我想在那里other_text =你需要围绕Mysql参数使用括号来防止sql注入吗?

下面是它看起来像从表中选择:

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注入,因此我不知道括号是否必要或甚至正确。

谢谢。

+0

它是否工作_without_括号? –

+0

@SergioTulentsev是的。我只是担心它不会在没有括号的情况下转义数据。 –

回答

1

括号表示一个数组。您可以使用数组,以防万一您有更多值要用于查询。

例如,假设你想从表中选择多个列,并希望通过他们的说法,你可以使用这样的事情:

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

它也确实在联合工作与字符串,数字甚至对象。假设你想从用户表格表中更新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) => { });