2017-09-05 5 views
-1

Je suis en train de refaire du code et il y a beaucoup de requêtes écrites dans des variables globales, mais j'ai remarqué que certaines de ces requêtes ne sont utilisées qu'une seule fois. Je suppose que la deuxième méthode sera meilleure pour ces requêtes. J'ai raison? Aussi la deuxième méthode utilise moins de mémoire ou pas de différence?Déclarer des requêtes dans des variables globales

méthode actuelle (en utilisant la variable globale):

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

Deuxième méthode (sans utiliser la variable globale):

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

Regardez l'assemblée. Selon l'utilisation, l'optimiseur, et combien vous optimisez le code, vous pourriez obtenir la même chose. – NathanOliver

Répondre

2

Ils sont tous deux très méchant. Nous n'intégrons plus de requêtes de ce type dans le code.

Utilisé une requête paramétrée à la place ou une procédure stockée. Dans le cas contraire, vous êtes vulnérable aux attaques par injection SQL et à d'autres comportements malveillants. En ce qui concerne la vitesse, le goulot d'étranglement sera dans l'acquisition de données, et encore moins dans la conception de la chaîne dans l'appel printf. Ne laissez pas l'aspect performance d'utiliser une variable globale ou autrement influencer vos décisions de conception.

Référence: https://en.wikipedia.org/wiki/SQL_injection

+0

Je connais l'injection SQL, c'était juste un exemple simple, mais merci d'expliquer cela. – exexe