AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   SQL sending killer id to SQL Query (https://forums.alliedmods.net/showthread.php?t=245919)

devWaleed 08-08-2014 19:22

SQL sending killer id to SQL Query
 
OK, as the first rule I tried myself and learned basics of this SQLx working. It is (almost) working but there is a little problem passing the killer id to sql query. Look here:

In DeathEvent:

PHP Code:

//I made killer a global var to make it reach the subthread of query but it doesn't work.
killer read_data(1);
    
username[killer] = get_user_name(killernamecharsmax(name));        
formatex(Query511"SELECT * FROM points WHERE `username`='%s'"username[killer]);        
SQL_ThreadQuery(g_SqlTuple"QueryThread_SELECT"Query); 



This works and I can reach next step without errors:



PHP Code:

public QueryThread_SELECT(FailStateHandle:QueryError[], ErrcodeData[], DataSize){
    
    if(
FailState == TQUERY_CONNECT_FAILED){
        return 
set_fail_state("Couldn't connect to DB");        
    }else if(
FailState == TQUERY_QUERY_FAILED){
        return 
set_fail_state("Query failed");
    }
    
    if(
SQL_NumResults(Query) < 1){
        
//I assume from tutorial that NumResults returns the selected rows, if 0 means no previous entry
        
formatex(szquery511"INSERT INTO `points` VALUES('%s', '+1')"username[killer]);
        
SQL_ThreadQuery(g_SqlTuple"FreeQueryHandler"szquery);
    }else if(
SQL_NumResults(Query) == 1){
               
//and if ==1 means there is previous entry, so +1 in last entry.
        
formatex(szquery511"UPDATE `points` SET `coins` = '+1' WHERE `username` = '%s'"username[killer]);
        
SQL_ThreadQuery(g_SqlTuple"FreeQueryHandler"szquery);
    }
    return 
PLUGIN_CONTINUE;


Results are:

I get 1 point data entered in MYSQL db but with empty 'username' field and after, it doesn't update. I think it has to do with that Data[] paramter right? Please show me...

devWaleed 08-08-2014 20:17

Re: SQL sending killer id to SQL Query
 
OK I'm sorry for double post but I found my answer by looking at settask data parameter.

It should be done like this:

In DeathMsg event:

PHP Code:

get_user_name(killernamecharsmax(name));        
        
formatex(Query511"SELECT * FROM points WHERE `username`='%s'"name);
        
SQL_ThreadQuery(g_SqlTuple"QueryThread_SELECT"Querynamecharsmax(name)); 

In Handler:

PHP Code:

public QueryThread_SELECT(FailStateHandle:QueryError[], ErrcodeData[], DataSize){
    
    if(
FailState == TQUERY_CONNECT_FAILED){
        return 
set_fail_state("Couldn't connect to DB");        
    }else if(
FailState == TQUERY_QUERY_FAILED){
        return 
set_fail_state("Query failed");
    }
    
    if(
SQL_NumResults(Query) < 1){
        
        
formatex(szquery511"INSERT INTO `points` VALUES('%s', '+1')"Data);
        
SQL_ThreadQuery(g_SqlTuple"FreeQueryHandler"szquery);
        
        
client_print(0print_chat"Insert for %s"Data);
        
        
        
    }else if(
SQL_NumResults(Query) == 1){
        
        
formatex(szquery511"UPDATE `points` SET `coins` = `coins`+1 WHERE `username` = '%s'"Data);
        
SQL_ThreadQuery(g_SqlTuple"FreeQueryHandler"szquery);
        
        
client_print(0print_chat"Update for %s"Data);
    }
    return 
PLUGIN_CONTINUE;


It works perfectly now...but if someone could do some improvements please reply..

Thanks

quark 08-09-2014 07:56

Re: SQL sending killer id to SQL Query
 
Thats so unnecessary. Why dont u use the 'traditional way', load on player connect, save no user disconnect?

devWaleed 08-09-2014 15:25

Re: SQL sending killer id to SQL Query
 
Quote:

Originally Posted by quark (Post 2181464)
Thats so unnecessary. Why dont u use the 'traditional way', load on player connect, save no user disconnect?

Load what? O.o Save what? I am saving kills in SQLx after some interval.


EDIT: There is another problem now.
Code:

        if(SQL_NumResults(Query) == 1){
                flags = SQL_ReadResult(Query, 2);       
                client_print(0, print_chat, "%s flag", flags);
        }

Database structure:
http://i.minus.com/ibpeuIuxaT1jGf.png

In database, second field is flag. It has p flag stored for me. But when I print it, it prints nothing but blank space. Any help?

quark 08-09-2014 17:05

Re: SQL sending killer id to SQL Query
 
to be honest i cant see the querys cause im on my mobile but i think running the query every kill is not eficcient


All times are GMT -4. The time now is 12:57.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.