Ok, I updated the script like this :
PHP Code:
#include <sourcemod>
public Plugin myinfo =
{
name = "Database.Escape test",
author = "Nobody-x",
version = "1"
};
Database g_hDatabase;
public void OnPluginStart() {
Database.Connect(OnDBConnect, "levels_ranks");
RegConsoleCmd("sm_test", Cmd_Test)
RegConsoleCmd("sm_test2", Cmd_Test2)
}
Action Cmd_Test(int client, int args) {
if (g_hDatabase == null) {
return Plugin_Continue;
}
char sName[65];
GetClientName(client, sName, 32);
LogMessage("Client name : \"%s\"", sName);
int written;
bool bReturn = g_hDatabase.Escape(sName, sName, sizeof(sName), written);
LogMessage("Escaped name : \"%s\" (Return : %s, written : %i)", sName, bReturn ? "true" : "false", written);
return Plugin_Changed;
}
Action Cmd_Test2(int client, int args) {
if (g_hDatabase == null) {
return Plugin_Continue;
}
char sName[65];
GetClientName(client, sName, 32);
LogMessage("Client name : \"%s\"", sName);
int written;
bool bReturn = SQL_EscapeString(g_hDatabase, sName, sName, sizeof(sName), written);
LogMessage("Escaped name : \"%s\" (Return : %s, written : %i)", sName, bReturn ? "true" : "false", written);
return Plugin_Changed;
}
public void OnDBConnect(Database db, const char[] error, any data)
{
if (db == null)
{
LogError("Database failure: %s", error);
return;
}
g_hDatabase = db;
}
Here are the outputs :
Code:
L 05/05/2020 - 22:29:56: [test_escape.smx] Client name : "No'"
L 05/05/2020 - 22:29:56: [test_escape.smx] Escaped name : "No\'" (Return : true, written : 4)
L 05/05/2020 - 22:29:58: [test_escape.smx] Client name : "No'"
L 05/05/2020 - 22:29:58: [test_escape.smx] Escaped name : "No\'" (Return : true, written : 4)
L 05/05/2020 - 22:30:28: [playercommands.smx] "No'<6><STEAM_1:1:74713004><>" renamed "No'<6><STEAM_1:1:74713004><>" (to "Everything's gonna be alright")
L 05/05/2020 - 22:30:30: [test_escape.smx] Client name : "Everything's gonna be alright"
L 05/05/2020 - 22:30:30: [test_escape.smx] Escaped name : "Everything\'\'\\\'\\\\\\\'\\\\\\\\\\\\\\\'\\\\\\" (Return : true, written : 48)
L 05/05/2020 - 22:30:32: [test_escape.smx] Client name : "Everything's gonna be alright"
L 05/05/2020 - 22:30:32: [test_escape.smx] Escaped name : "Everything\'\'\\\'\\\\\\\'\\\\\\\\\\\\\\\'\\\\\\" (Return : true, written : 48)
PS: I'm testing both commands in the order sm_test then sm_test2 (but Database.Escape() and SQL_EscapeString() do exactly the same thing right ?).
PS2: For the size of the buffer, the GetClientName call is done with a max size of 32 and the buffer total size is 65 (32*2+1) which is used into the escape function. That's extracted from LevelsRanks plugin.