PDA

View Full Version : SQL Problem


ServerFiles
24/08/2018, 02:43 AM
What is wrong this this code? everytime I search player name, it always returns can't find any even tho if I check the database, there is some players with same gpci.

COMMAND:omatch(playerid, params[])
{
if(!PlayerInfo[playerid][power]) return SendClientError(playerid, CANT_USE_CMD);
new emri[32];
if(sscanf(params, "s", emri)) return SCP(playerid, "<Player_Name>");
new sql[164], gpcija[64], Cache:result;
mysql_format(sqldb, sql, sizeof sql, "SELECT `PlayerInfo` FROM `gpci` WHERE `PlayerName` = '%s'", emri);
mysql_query(sqldb, sql);
cache_get_field_content(0, "gpci", gpcija);
mysql_format(sqldb, sql, sizeof sql, "SELECT * FROM `PlayerInfo` WHERE `gpci` = '%s'", gpcija);
result = mysql_query(sqldb, sql);
new rows = cache_num_rows();
if(rows)
{
new iStr[ 128 ];
for(new i; i < rows; i++)
{
new emri1[128];
cache_get_field_content(i, "PlayerName", emri1);
if(strcmp(emri1, emri))
{
format(iStr, sizeof(iStr), "{ea8080}[AC]:{f3c0c0} %s matches with %s", emri1, emri);
SendClientMessage(playerid, -1, iStr);
}
}
}
else
{
SendClientMessage(playerid, -1, "{ea8080}[AC]:{f3c0c0} Can't find any linked!");
}
cache_delete(result);
return 1;
}

Nero_3D
24/08/2018, 05:49 AM
You try to fetch the field gpci although you only selected the column PlayerInfo

Several other things

Reduce the two queries to one with join (https://dev.mysql.com/doc/refman/8.0/en/join.html)
If player names are unique, just select from PlayerInfo directly
The strcmp (http://wiki.sa-mp.com/wiki/Strcmp) line is wrong, currently it checks for "not equal"
Use threaded queries (http://wiki.sa-mp.com/wiki/MySQL/R33#mysql_tquery) if available

ServerFiles
24/08/2018, 08:48 AM
I make few changes, now it shows players name, but it shows randomly..

Like Player 1 have GPCI A12B and Player 2 have GPCI A13B and if I search for Player 1 GPCI it says it linked with Player 2 but it obvious both gpci is different.

Nero_3D
25/08/2018, 12:41 AM
You could print the player names to check manually but it is most probably a mistake in the if statement



The strcmp (http://wiki.sa-mp.com/wiki/Strcmp) line is wrong, currently it checks for "not equal"

ServerFiles
25/08/2018, 02:30 AM
Alright thanks

Sew_Sumi
25/08/2018, 03:11 AM
There's also the thing that this is why gpci isn't really used as a sole indicator of whether someone is someone else.

It's known to produce duplicates, because of how it works, and it can be changed using mods.