Hey Breadfisher,
Hab seit heute nen komisches Problem. Ich arbeite derzeit an einem Roleplay Script welches mit meiner MySQL Datenbank auf dem Linux Server verbunden ist.
Bisher lief alles reibungslos, seit einer Woche bin ich hier am Gange. Spieler konnten sich bis heute problemlos einen Account erstellen und sich einloggen, alles wurde geladen & gespeichert wie gewollt. Dann wollte sich heute
nen Kollege von mir registrieren damit ich mit ihm gewisse commands testen kann, doch dann speichert sich plötzlich der Account nicht. Fehlermeldung in der mysql_log.txt:
"MySQLQuery::Execute[()] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1"
einen Syntax Error kann ich ausschließen. Ich habe die query's seperat auf der Datenbank ausgeführt ohne Syntax Error, die Variablen wurden aber auch nicht verändert. Wie kann es sein das von jetzt auf gleich die Datenbank keine Lust mehr hat Accounts zu speichern?
Stocks:
stock PlayerSave(playerid)
{
print("Inside PlayerSave");
//if(pInfo[playerid][loggedin]==0)return 1;
print("Player is logged in");
//Saves the Values listed below
new query[255];
print("Formating now");
printf("Skin: %i Faction: %i",pInfo[playerid][skin],pInfo[playerid][faction]);
format(query,sizeof(query),"UPDATE Players SET Level='%i',Money='%i',Adminlevel='%i',Faction='%i',Rank='%i',Wanted_Level='%i' WHERE ID='%i' ",pInfo[playerid][level],GetPlayerMoney(playerid),pInfo[playerid][adminlevel],pInfo[playerid][faction],pInfo[playerid][rank],GetPlayerWantedLevel(playerid),pInfo[playerid][id]);
printf("%i Query Length",strlen(query));
print("Formating done");
mysql_function_query(dbindex,query,false,"","");
print("Jumping out of SavePlayer");
return 1;
}
Publics:
public OnPasswordResponse(playerid)
{
new num_fields,num_rows;
cache_get_data(num_rows,num_fields,dbindex);
if(num_rows==1)
{
print("Inside OnPasswordResponse");
//Password right
pInfo[playerid][loggedin] = 1;
pInfo[playerid][level] = cache_get_field_content_int(0,"Level",dbindex);
SetPlayerScore(playerid,pInfo[playerid][level]);
pInfo[playerid][id] = cache_get_field_content_int(0,"ID",dbindex);
SetPlayerMoney(playerid,cache_get_field_content_int(0,"Money",dbindex));
pInfo[playerid][adminlevel] = cache_get_field_content_int(0,"Adminlevel",dbindex);
pInfo[playerid][faction] = cache_get_field_content_int(0,"Faction",dbindex);
pInfo[playerid][rank] = cache_get_field_content_int(0,"Rank",dbindex);
pInfo[playerid][skin] = cache_get_field_content_int(0,"Skin",dbindex);
pInfo[playerid][wanted_level] = cache_get_field_content_int(0,"Wanted_Level",dbindex);
SetPlayerWantedLevel(playerid,pInfo[playerid][wanted_level]);
new Float:X = fInfo[pInfo[playerid][faction]][f_x],Float:Y = fInfo[pInfo[playerid][faction]][f_y],Float:Z = fInfo[pInfo[playerid][faction]][f_z],Float:A = fInfo[pInfo[playerid][faction]][f_a];
SetSpawnInfo(playerid,pInfo[playerid][faction],pInfo[playerid][skin],X,Y,Z,A,0,0,0,0,0,0);
SetPlayerColor(playerid,fInfo[pInfo[playerid][faction]][f_color]);
print("Exiting OnPasswordResponse");
}
else
{
//Password wrong
SendClientMessage(playerid,COLOR_RED,"The password is wrong.");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Please type in your Password:","Okay","Abbrechen");
}
return 1;
}
Register/Login
//Register
if(dialogid==DIALOG_REGISTER)
{
print("Inside Register");
if(response)
{
print("Inside Register Response 1");
new name[MAX_PLAYER_NAME],query[128],password[35];
GetPlayerName(playerid,name,sizeof(name));
if(strlen(inputtext)>MINIMUM_PASSWORD_LENGTH)
{
//Registrierungsfunktion
mysql_escape_string(inputtext,password,dbindex);
print("Formating query for register");
format(query,sizeof(query),"INSERT INTO Players (Username,Password,Level,Money,Faction,Rank,Skin) VALUES ('%s','%s','%i','%i','%i','%i','%i')",name,password,pInfo[playerid][level]=1,pInfo[playerid][money]=1500,pInfo[playerid][faction]=0,pInfo[playerid][rank]=0,pInfo[playerid][skin]=26);
print("Running query for register");
mysql_function_query(dbindex,query,false,"","");
print("Done");
}
else
{
//Kleiner als 4 Zeichen
SendClientMessage(playerid,COLOR_RED,"The Password has to be atleast 4 characters long.");
Kick(playerid);
}
}
else
{
Kick(playerid);
}
return 1;
}
if(dialogid==DIALOG_FACTIONLIST)
{
if(response)
{
}
else
{
}
return 1;
}
//Login
if(dialogid==DIALOG_LOGIN)
{
if(response)
{
new name[MAX_PLAYER_NAME],query[128],password[35];
GetPlayerName(playerid,name,sizeof(name));
if(isnull(inputtext))
{
Kick(playerid);
}
if(strlen(inputtext)>0 && strcmp(inputtext,password) == 0)
{
mysql_escape_string(inputtext,password,dbindex);
format(query,sizeof(query),"SELECT * FROM Players WHERE Username='%s' AND Password='%s'",name,password);
mysql_function_query(dbindex,query,true,"OnPasswordResponse","i",playerid);
}
else if(!strcmp(inputtext,password))
{
//No entry
Kick(playerid);
SendClientMessage(playerid,COLOR_RED,"Please type in your Password.");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Please type in your Password:","Okay","Cancel");
}
}
else
{
Kick(playerid);
}
return 1;
}
Glauben könnt ihr mir auch das alle Tabellen sowie Datentypen ihrer richtigkeit entsprechen. Einen Fehler finde ich hier gerade nicht.