mysql /changename cmd bug? -
BlackWolf120 - 04.09.2011
hi,
just wondering why this /changename command wont work.
it prints this error in the log:
Код:
[MySQL] Error (0): Failed to exeute query. Unknown column 'The name i entered' in 'field list'.
heres the code:
pawn Код:
dcmd_changename(playerid,params[])
{
if(Spieler[playerid][AdminLevel] > 2)
{
new pID,pname[24],newname[24];
if(sscanf(params, "ds[24]",pID,newname))return SendClientMessage(playerid,0xFF0000FF,"Usage: /changename [ID][New Name]");
if(pID == INVALID_PLAYER_ID)return SendClientMessage(playerid,0xFF0000FF,"This PlayerId is invalid!");
GetPlayerName(pID,pname,24);
new query1[256],escapename[24];
mysql_real_escape_string(newname, escapename);
format(query1, sizeof(query1), "SELECT name FROM `Users` WHERE name = '%s' LIMIT 1", escapename);
mysql_query(query1);
mysql_store_result();
new rows = mysql_num_rows();
if(!rows)
{
new query[256];
format(query, sizeof(query), "UPDATE Users SET name=%s WHERE name ='%s'",escapename,pname);
mysql_query(query);
SetPlayerName(pID,escapename);
new levelsetter[MAX_PLAYER_NAME],adminstring[128];
GetPlayerName(playerid,levelsetter,sizeof(levelsetter));
format(adminstring,sizeof(adminstring),"Admin * %s * has changed your name to %s!",levelsetter, newname);
SendClientMessage(pID,0xFF0000FF, adminstring);
SendClientMessage(playerid, 0xFF0000FF, "You have changed the name successfully.");
}
else if(rows == 1)
{
SendClientMessage(playerid, 0xFF0000FF, "This name already exists!");
}
mysql_free_result();
}else return SendClientMessage(playerid, 0xFF0000FF, "You don't have permission to use this command!");
return 1;
}
Would be great if someone could tell me the solution
Re: mysql /changename cmd bug? -
[HiC]TheKiller - 04.09.2011
Could you print the 2 query strings after the format and post them here?
EDIT: Also make sure that the user is in the database before using the Update query.
Re: mysql /changename cmd bug? -
BlackWolf120 - 04.09.2011
i only escape the one name cause the other name is not entered by the user but stored with GetPlayerName.
So why should i escape that one?
Also i SELECT only once so why should i free it before i update the query?
UPDATE does not need any storage or free as far as i know
Please apologize if im wrong but im quite new to mysql stuff
And if i wanna change to a name that is already existing it works, it shows me that i cant change it cause it already exists.
So id say u need only the second query printed?
And thx for ur answer
//edit
here u go
Код:
[03:36:12] [join] BlackWolf has joined the server
[03:36:29] SELECT name FROM `Users` WHERE name = 'test' LIMIT 1
[03:36:29] [MySQL] Error (0): Failed to exeute query. Unknown column 'test' in 'field list'.
[03:36:29] UPDATE Users SET name=test WHERE name ='BlackWolf'
[03:36:29] [nick] BlackWolf nick changed to test
[03:36:36] [part] test has left the server (0:1)
Re: mysql /changename cmd bug? -
=WoR=Varth - 04.09.2011
pawn Код:
format(query1, sizeof(query1), "SELECT name FROM `Users` WHERE name = '%s' LIMIT 1",pname);
Re: mysql /changename cmd bug? -
Hiddos - 04.09.2011
Are you connected to the right database/using the right table/field name?
Код:
[MySQL] Error (0): Failed to exeute query. Unknown column 'The name i entered' in 'field list'.
+
[03:36:29] [MySQL] Error (0): Failed to exeute query. Unknown column 'test' in 'field list'.
Those are very weird names if you'd ask me 0.o
PS: I also recommend you not to use spaces in names.
Re: mysql /changename cmd bug? -
Vince - 04.09.2011
If you use these ` characters, you need to be consequent and wrap 'm around field names too. Furthermore, literal strings should always be enclosed by single quotes '. This should work:
Код:
SELECT `name` FROM `Users` WHERE `name` = '%s' LIMIT 1
UPDATE `Users` SET name = '%s' WHERE `name` ='%s'
Re: mysql /changename cmd bug? -
Jeffry - 04.09.2011
pawn Код:
dcmd_changename(playerid,params[])
{
if(Spieler[playerid][AdminLevel] > 2)
{
new pID,pname[24],newname[24];
if(sscanf(params, "ds[24]",pID,newname))return SendClientMessage(playerid,0xFF0000FF,"Usage: /changename [ID][New Name]");
if(pID == INVALID_PLAYER_ID)return SendClientMessage(playerid,0xFF0000FF,"This PlayerId is invalid!");
GetPlayerName(pID,pname,24);
new query1[256],escapename[24];
mysql_real_escape_string(newname, escapename);
format(query1, sizeof(query1), "SELECT `name` FROM `Users` WHERE `name` = '%s' LIMIT 1", escapename);
mysql_query(query1);
mysql_store_result();
new rows = mysql_num_rows();
if(!rows)
{
new query[256];
format(query, sizeof(query), "UPDATE `Users` SET `name`= '%s' WHERE `name` ='%s'",escapename,pname);
mysql_query(query);
SetPlayerName(pID,escapename);
new levelsetter[MAX_PLAYER_NAME],adminstring[128];
GetPlayerName(playerid,levelsetter,sizeof(levelsetter));
format(adminstring,sizeof(adminstring),"Admin * %s * has changed your name to %s!",levelsetter, newname);
SendClientMessage(pID,0xFF0000FF, adminstring);
SendClientMessage(playerid, 0xFF0000FF, "You have changed the name successfully.");
}
else if(rows == 1)
{
SendClientMessage(playerid, 0xFF0000FF, "This name already exists!");
}
mysql_free_result();
}
else return SendClientMessage(playerid, 0xFF0000FF, "You don't have permission to use this command!");
return 1;
}
I guess this should do it.
(Fixed your indention as well^^)
Jeffry
Re: mysql /changename cmd bug? -
BlackWolf120 - 04.09.2011
thx alot guys, imma try this out soon.
+Reps for everyone
kind regards, wolf.