mysql /changename cmd bug?
#1

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
Reply
#2

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.
Reply
#3

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)
Reply
#4

pawn Код:
format(query1, sizeof(query1), "SELECT name FROM `Users` WHERE name = '%s' LIMIT 1",pname);
Reply
#5

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.
Reply
#6

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'
Reply
#7

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
Reply
#8

thx alot guys, imma try this out soon.

+Reps for everyone

kind regards, wolf.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)