2017-09-05 4 views
-1

현재 코드를 리 메이킹 중이며 전역 변수에 많은 쿼리가 기록되어 있지만 이러한 쿼리 중 일부는 한 번만 사용됩니다. 두 번째 방법이 해당 쿼리에 더 적합 할 것으로 가정합니다. 난 괜찮아? 또한 두 번째 방법은 메모리를 덜 사용하거나 차이가 없습니까? (글로벌 변수를 사용하여)글로벌 변수에서 쿼리 선언

현재 방법 (전역 변수를 사용하지 않고)

char g_query[] = "SELECT %s FROM %s WHERE %s >= %i"; 
void func() 
{ 
    printf(g_query, "name", "table", "something", 1); 
} 

두 번째 방법 :

void func() 
{ 
    printf("SELECT %s FROM %s WHERE %s >= %i", "name", "table", "something", 1); 
} 
+0

조립품을 살펴보십시오. 사용법, 옵티마이 저 및 코드 최적화 정도에 따라 동일한 결과를 얻을 수 있습니다. – NathanOliver

답변

2

그들은 모두 아주 장난 꾸러기입니다. 더 이상 코드에 그런 쿼리를 포함시키지 않습니다.

대신 매개 변수화 된 쿼리 또는 저장 프로 시저를 사용했습니다.

그렇지 않으면 당신은 SQL 주입 공격 및 기타 nasties에 취약합니다.

속도에 관해서는 병목 현상이 데이터 수집에있을 것이고 printf 호출에서 문자열의 형성은 말할 것도 없습니다. 전역 변수를 사용하거나 디자인 결정에 영향을 미치지 않도록하십시오.

참조 : https://en.wikipedia.org/wiki/SQL_injection

+0

SQL 인젝션에 대해 알고 있는데, 그저 간단한 예제 일 뿐이라고 설명해 주셔서 감사합니다. – exexe