Thread: [Solved] Sql Query Insert Problem
View Single Post
arcticx2
Senior Member
Join Date: Nov 2011
Old 01-12-2019 , 10:03   Re: Sql Query Insert Problem
Reply With Quote #9

Quote:
Originally Posted by asherkin View Post
Basically, it is really hard to do per-variable escaping correctly.

Taking the simple example of updating a players name stored in a database against a SteamID:

Using Database.Escape correctly looks like this:
PHP Code:
char name[MAX_NAME_LENGTH];
if (!
GetClientName(clientnamesizeof(name))) {
  return 
false;
}

int safeNameLen = (strlen(name) * 2) + 1;
char[] safeName = new char[safeNameLen];
db.Escape(namesafeNamesafeNameLen);

char steamId[32];
if (!
GetClientAuthId(clientAuthId_Steam2steamIdsizeof(steamId))) {
  return 
false;
}

int safeSteamIdLen = (strlen(steamId) * 2) + 1;
char[] safeSteamId = new char[safeSteamIdLen];
db.Escape(steamIdsafeSteamIdsafeSteamIdLen);

char buffer[512];
Format(buffersizeof(buffer), "UPDATE players SET name = '%s' WHERE steamid = '%s'"safeNamesafeSteamId);
db.Query(OnQueryCompletebuffer); 
Whereas using Database.Format looks like this:
PHP Code:
char steamId[32];
if (!
GetClientAuthId(clientAuthId_Steam2steamidsizeof(steamid))) {
  return 
false;
}

char buffer[512];
db.Format(buffersizeof(buffer), "UPDATE players SET name = '%N' WHERE steamid = '%s'"clientsteamId);
db.Query(OnQueryCompletebuffer); 
It is a lot shorter and harder to get wrong.
nice explanation asherkin thanks for your post , have some
arcticx2 is offline