2017-09-05 8 views
2

node.js를 사용하여 Query config 객체를 사용하여 PostgreSQL 테이블에 액세스하고 있습니다.node-postgres의 Query config 객체에서 큰 따옴표로 문자열을 선언하는 방법

내가 만들고자하는 선택은 DB와 잘 동작하는 'SELECT * FROM "Customers" WHERE "CustomersID" = 1'입니다.

자, 지금 사용하고있는 Query 개체입니다.

const query = { 
    text: 'SELECT * FROM $1 WHERE "CustomersID" = $2', 
    values : ["Customers",1], 
} 

는하지만,하지만 나를 위해 작동하지 않는 것 "나는 및/또는 '와 다른 방법을 시도 오류입니다. "$ 1 "또는 근처에서 구문 오류"를 얻을.

값 배열에 큰 따옴표가있는 문자열로 $ 1을 (를) 선언하는 올바른 방법은 무엇입니까?

감사 거스

답변

0

Parameterized Queries/Prepared Statements 불필요한 과잉 비록 충분 SQL 인젝션을 대응하기 위해, 열 또는 표 이름에 대한 변수를 허용하지 않는 서버 측에 포맷, 이에 제한에 의해 부과 PostgreSQL 서버.

별도의 이스케이프 열/테이블 이름은 실제로 SQL 삽입을 방지하기에 충분하지만 사용자 쪽에서 수행해야하며 기본 드라이버 node-postgres은 쿼리 형식 내에서이를 지원하지 않습니다. 대안으로

, pg-promise는 이것을 완전히 지원합니다 : 그것은 제대로 열/테이블 이름을 피해 자신의 SQL Names 표기법을 사용

db.query('SELECT * FROM $1:name WHERE "CustomersID" = $2', ['Customers', 1]); 
// OR: 
db.query('SELECT * FROM $1~ WHERE "CustomersID" = $2', ['Customers', 1]); 

. :name 또는 ~ 중 하나를 변수에 추가하여 해당 변수가 일반 값이 아닌 SQL 이름을 나타낼 수 있음을 나타낼 수 있습니다.