2017-02-11 3 views
0

나는 nodejs와 MySQL의 NPM 패키지를 사용하고 난 other_text가 여기에SQL 삽입을 방지하기 위해 MySQL 파라미터 주위에 대괄호가 필요합니까?

이는 모습입니다 = 곳 테이블에서 선택하려고 해요 :

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

대괄호가없이 작동합니까? –

+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) => { }); 
관련 문제