2017-02-11 64 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) => { });