2011-11-29 3 views
2

node-mysql을 사용하여 node.js 앱에 MySQL 데이터베이스를 쿼리했습니다.MySQL 쿼리의 변수로 인해 오류가 발생합니다.

문제점 : 쿼리의 테이블 이름을 변수로 만들면 작업이 중단되는 것으로 나타납니다. 나는 무엇인가 놓치지 않았는가?

작업 노드 코드

client.query('SELECT * from tableA', 
       function(error, results, fields) { 
        if (error) 
         throw error; 
        callback(results); 
       }); 

비 작업 노드 코드

client.query('SELECT * from ?', 
       [ tableA ], 
       function(error, results, fields) { 
        if (error) 
         throw error; 
        callback(results); 
       }); 
+1

일반적으로 테이블 이름을 매개 변수로 전달할 수 없습니다. 대신 동적 SQL을 사용해야합니다. –

+0

가능한 복제본 [* mysql sproc *의 테이블 이름에 대한 변수 사용 (http://stackoverflow.com/questions/2754423/use-a-variable-for-table-name-in-mysql-sproc) 및 [ * MySQL : 저장 프로 시저 및/또는 함수 인수로 테이블 이름을 전달하는 방법 *] (http://stackoverflow.com/questions/2977356/in-mysql-how-to-pass-a-table-name- 저장 프로 시저 및 함수 인수와 함께) – mellamokb

답변

3

당신은 아마 문자열 (의사 코드에 테이블 이름을 추가 할 수있다, 나도 몰라 node.js)

client.query('SELECT * from ' + [tablaA], 
       function(error, results, fields) { 
        if (error) 
         throw error; 
        callback(results); 
       }); 
+0

및 이전 질문에서 답변을 제공 할 수 있습니다. http://stackoverflow.com/questions/8317472/inserting-variables-into-sql-query-for-node -mysql :) –

+0

맞아,이게 PHP 같은 일반적인 MySQL 쿼리에 적용되는지 궁금 해서요.이 node.js가 특정입니까? – Nyxynyx

+1

MySQL의 테이블 이름은 준비된 명령문에서 변수 (?)가 허용되지 않습니다. nodejs는 백그라운드에서 준비된 문을 수행합니다. –

0

그들은 그것이 작동하지 않는 이유를 꽤 분명합니다.

비 작동 코드에서 쿼리는 다음과 같습니다

'TABLEA'

이 솔루션은 @Andreas의 하나이지만,이 같은 문제에있을 것이다로부터

SELECT * where 문 또는 "null"값처럼 이스케이프되지 않으려는 다른 값에 대한 삽입

같은 문제 here

체크 아웃 (문자열로 변환)을 source 방법 형식 & 노드 MySQL의 작품에서 & 탈출.

+1

필자는 테이블 이름, 데이터베이스 이름, 열 이름을 이스케이프 할 수없는 반면 칼럼과 MySQL 함수에 추가 할 값은 무엇입니까? – Nyxynyx

+0

그렇습니다. 자리 표시자는 일반적으로 동적 데이터 (매개 변수) – malletjo

관련 문제