2012-09-07 2 views
0

실제로는 C 프로그램에서 SELECT 쿼리의 변수가 문자열 변수에 저장된 값으로 SQL 쿼리를 실행하려고합니다. 예를 들어C 프로그램에서 SQL select 쿼리에서 동적 변수를 사용할 수 있습니까?

: 여기

void fetch_data(char var[]) 
{ 
    char COL1[]=var, COL2[]="Address", COL3[]="Name"; 
    SELECT COL1, COL2, COL3 FROM TABLE WHERE COL4='some value'; 
} 

나는 fetch_data 함수의 매개 변수 인 변수 var에 따라 다른 열 이름을 가질 수 있도록 내 코드를 유연하게 할 원하는 볼 수 있습니다. 내가 수정할 수 있도록 우리가, 문자열 전체 SQL 문을 저장하고 실행할 수 있습니다 :이

위가 가능하지 않은 경우 나 다른 방법을 생각 C.

가능한 경우

알려주세요 이 문자열은 내가 함수의 파라미터 값에 따라 원할 때마다 fetch_data()입니까?

void fetch_data(char var[]) 
{ 
    char COL1[]="Name", COL2[]="Address", COL3[]=var; 
    char qry1[]="SELECT ", qry2[]=var, qry3=" COL2, COL3 FROM TABLE WHERE COL4='some value';"; 
    char str[]=strcat(qry1,qry2); 
    char query[]=strcat(str,qry3); 
    //now query will be having "select (value of var), COL2, COL3 FROM TABLE WHERE COL4='some value'; 
} 

이제 위의 코드에서, 내가 문자열 query에 저장된 쿼리를 실행할 수 있습니다

아래 코드는 내가 원하는 나의 점을 더 명확하게 할 것인가?

두 가지 방법 중 하나라도 효과가 있거나 'C'의 다른 방법으로 해결할 수 있는지 알려주세요.

+0

이 작업을 수행하는 방법은 데이터베이스 드라이버에 따라 다릅니다. 하지만 일반적으로 쿼리 문자열을 수정해서는 안되며 ** 정말 안전하지 않습니다 **. 다양한 파트가있는 위치 표시자를 넣고 실제 값을 매개 변수로 전달할 수있는 함수/함수 세트를 사용해야합니다. – ninjalj

답변

2

두 번째 방법이 효과적 일 것입니다. 문자열 조작에주의해야합니다.

사실 당신은 snprintf를 사용하여 단순화 수 :

snprintf(queryStr, MAX_QUERY_LENGTH, 
     "SELECT %s, COL2, COL3 FROM TABLE WHERE COL4='some value';", var); 

를 쿼리가 더 동적 할 필요가있는 경우, 즉 또한 변수에서 가야합니다 'some value', 추가 형식 지정 추가 할 수 있습니다

snprintf(queryStr, MAX_QUERY_LENGTH, 
     "SELECT %s, COL2, COL3 FROM TABLE WHERE COL4='%s';", var, someValue); 

그런 쿼리를 준비하면 사용 방법은 툴 체인에 따라 다릅니다. ODBC을 사용하고 있습니까? 그렇다면 ODBC 호출을 사용하여 쿼리를 처리하고 ODBC 드라이버를 사용하여 데이터베이스에 대한 연결을 관리 할 수 ​​있습니다. 그렇지 않으면 어떤 데이터베이스를 사용하고 있으며 어떤 API가 제공됩니까? 예를 들어, MySQL은 꽤 큰 C API을, 오라클은 다른 것을, SQL Server는 또 다른 것을 제공합니다.

첫 번째 옵션의 경우 C 코드에서 원시 SQL 문과 같은 것을 사용하려면 SQL preprocessor을 사용해야하며 구문은 사용하는 도구에 따라 다릅니다.

char COL1[]=var;과 같은 문을 사용하여 리터럴이 아닌 C 문자열을 복사 할 수 없다는 점도 덧붙여 야합니다. 대신 strncpy과 같은 문자열 라이브러리 메서드를 사용해야합니다.

+0

감사합니다. 또한 C 프로그램의 문자열에 저장된 쿼리를 실행하는 방법을 알려주십시오. –

+1

2 단어 : SQL 주입 – ninjalj

관련 문제