/* * The headers need to be added here */ #include "include.h" #include <mysql.h> /* * Here, there need to be externs to a NEW variable set in merc.h, to check and see if the * mySQL server is open for connections. And a way to check to see if the mysql server is * up and running at any one time. * The variable would be named like: bool sql_on, if it's true, then it works, if it's * false, then it's not working * Also, there needs to be a variable in the directories include to tell which code we're * running. * Now, here's the functions and how to use them * sql_connect: this is the raw entrance, don't worry too much about it * sql_disconnect: closes connection * boot_database, void function to start the mysql thread * connect_ping: not sure, it was from jason's code, seems useful * sql_parse: parses a value to allow for special characters. * sql_status: returns sql status as a string * * This is the update of an integer field * void sql_update_int(table name,field name,table key name,integer value,row id) * * This is the update of a character field * void sql_update_char(table name,field name,table key name,character string,row id) * * This inserts a new row into a table: * void sql_insert_row(table name,table key field,row) * * This removes a row from a table: * void sql_delete_row(table name,table key field,row id) * * This is the counting routine for locating how many rows are in a table * int sql_count_table(table name,table key) * * This counts the number of returned matches for a search * int sql_count_search_field(table name,field to search,the match string) * * This returns the value of an integer * char sql_search_int_field(table name,field name,search number,table key,the match number to return) * * This requires an example: * sql_search_int_field(players,age,17,p_id,2) * would return the second match (it starts at 1 and goes to the number of return searches) * * Same as above, cept returns char value * char sql_search_char_field(table,field,search string,key,match number) * * This replaces the char value of a field, with the new string * void sql_update_char_field(table,field,new string,table key,row id) * * This replaces the int value of a field, with the new int * void sql_update_int_field(table,field,new integer,table key,row id) * * This is the retrieve command for integers * int sql_get_int_field(table,field,table key,row id) * * This is the retrieve command for strings * char sql_get_int_field(table,field,table key,row id) */ MYSQL * sql_connect( void ) { MYSQL *conn; /* pointer to connection handler */ char stderr[MSL]; char buf[MSL]; conn = mysql_init (NULL); /* allocate, initialize connection handler */ if (conn == NULL) { sprintf(stderr,"mysql_init() failed (probably out of memory)\r\n"); log_string(stderr); return (NULL); } if (mysql_real_connect (conn, db_host, db_user, db_pass, db_name, 0, NULL, 0) == NULL) { sprintf(stderr,"mysql_real_connect() failed:\r\nError %u (%s)\r\n", mysql_errno (conn), mysql_error (conn)); log_string(stderr); return (NULL); } sprintf(buf,"MySQL: Connected to the sql server [Thread: %ld]", mysql_thread_id(conn)); log_string(buf); return (conn); } void sql_disconnect(MYSQL *conn) { mysql_close(conn); log_string("Disconnected from the sql server."); } MYSQL *conn; MYSQL_RES *res_set; bool sql_ping(void) { if (conn == NULL) { log_string("MySQL: Ping."); mysql_ping(conn); return TRUE; } return FALSE; } char *sql_parse(char *name) { char *buf; buf = NULL; (void) mysql_escape_string (buf, name, strlen(name)); return buf; } void sql_update_char(char *table, char *field,char *key, char *value, long id) { char buf[MSL]; sprintf(buf, "UPDATE %s SET %s='%s' WHERE %s=%ld",table,field,sql_parse(value),key, id); mysql_query(conn, buf); return; } void sql_update_int(char *table,char *field,char *key, int value, long id) { char buf[MSL]; sprintf(buf, "UPDATE %s SET %s=%d WHERE %s=%ld",table,field,value,key,id); mysql_query(conn, buf); return; } void sql_insert_row(char *table, char *key, long id) { char buf[MSL]; sprintf(buf,"INSERT INTO %s (%s) VALUES(%ld)",table,key,id); mysql_query(conn,buf); } void sql_delete_row(char *table, char *key, long id) { char buf[MSL]; sprintf(buf,"DELETE FROM %s WHERE %s=%ld",table,key,id); mysql_query(conn,buf); } int sql_count_table(char *table, char *key) { char buf[MSL]; int count; sprintf(buf,"SELECT COUNT(%s) FROM %s",key,table); mysql_query(conn,buf); res_set = mysql_store_result(conn); count = mysql_num_rows(res_set); mysql_free_result(res_set); return count; } int sql_count_search_field(char *table, char *field, char *search, char *key) { char buf[MSL]; int count; sprintf(buf,"SELECT COUNT(%s) FROM %s WHERE %s='%s'",key,table,field,sql_parse(search)); mysql_query(conn,buf); res_set = mysql_store_result(conn); count = mysql_num_rows(res_set); mysql_free_result(res_set); return count; } int sql_search_int_field(char *table, char *field, char *value, char *key, int place) { MYSQL_ROW row; char buf[MSL]; int result; int total = 0; int i; if (place > total) place = total; if (place < 1) place = 1; place--; sprintf(buf,"SELECT %s FROM %s WHERE %s='%s' ORDER BY %s",field,table,field,sql_parse(value),key); mysql_query(conn,buf); res_set = mysql_store_result(conn); total = mysql_num_rows(res_set); for(i = 0; i < total; i++) { row = mysql_fetch_row (res_set); if (i == place) sprintf(buf,"%s",row[0]); } mysql_free_result(res_set); if (!buf) sprintf(buf,"0"); result = atoi(buf); return result; } char *sql_search_char_field(char *table, char *field, char *value, char *key, int place) { MYSQL_ROW row; char buf[MSL]; char *result = '\0'; int total = 0; int i; if (place > total) place = total; if (place < 1) place = 1; place--; sprintf(buf,"SELECT %s FROM %s WHERE %s='%s' ORDER BY %s",field,table,field,key,sql_parse(value)); mysql_query(conn,buf); res_set = mysql_store_result(conn); total = mysql_num_rows(res_set); for(i = 0; i < total; i++) { row = mysql_fetch_row (res_set); if (i == place) sprintf(result,"%s",row[0]); } mysql_free_result(res_set); return result; } void sql_update_char_field(char *table, char *field, char *value, char *key, long id) { char buf[MSL]; sprintf(buf, "UPDATE %s SET %s='%s' WHERE %s='%ld'",table, field,sql_parse(value),key,id); mysql_query(conn,buf); return; } void sql_update_int_field(char *table, char *field, int value, char *key, long id) { char buf[MSL]; sprintf(buf, "UPDATE %s SET %s='%d' WHERE %s='%ld'",table, field,value,key,id); mysql_query(conn,buf); return; } int sql_get_int_field(char *table, char *field, char *key, long id) { MYSQL_ROW row; char buf[MSL]; int ret; sprintf(buf, "SELECT %s FROM %s WHERE %s=%ld",table,field,key,id); mysql_query(conn,buf); res_set = mysql_store_result(conn); row = mysql_fetch_row(res_set); ret = atoi(row[0]); mysql_free_result(res_set); return (ret); } char *sql_get_char_field(char *table, char *field, char *key, long id) { char buf[MSL]; MYSQL_ROW row; char *ret; sprintf(buf, "SELECT %s FROM %s WHERE %s=%ld",table,field,key,id); mysql_query(conn, buf); res_set = mysql_store_result(conn); row = mysql_fetch_row(res_set); if (row[0] != NULL) { ret = str_dup(row[0]); } else { ret = "NULL"; } mysql_free_result(res_set); return ret; } char *sql_status( void ) { if (conn == NULL) return "No Connection"; return mysql_stat(conn); } /* In progress bool sql_player_full( CHAR_DATA *ch ) { if ( !sql_player_save(ch) ) return; if ( !sql_clan_update(ch) ) return; bool sql_player_save( CHAR_DATA *ch ) { if (conn == NULL) return FALSE; */