1
0

asql.inc 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. /*
  2. *
  3. * SA:MP Include
  4. *
  5. * aSQL.inc : Part of Innova Include Collection (IIC) By Rogér "aFei" Paland
  6. *
  7. * Copyright (c) 2011, Innova Gaming (IG)
  8. *
  9. */
  10. #if !defined mysql_included
  11. #error "a_mysql needs to be included to make aSQL work"
  12. #endinput
  13. #endif
  14. #if !defined _samp_included
  15. #endinput
  16. #endif
  17. #include "SQL/YSI_MD5.own"
  18. #include "SQL/config.ini"
  19. /*
  20. native SQL_ConnectDatabase();
  21. native SQL_DisconnectDatabase();
  22. native -------------------------;
  23. native SQL_GetFloat(dbRowID, const TABLE[], const COLUMN[], &Float:result);
  24. native SQL_GetInt(dbRowID, const TABLE[], const COLUMN[], &myint);
  25. native SQL_GetString(dbRowID, const TABLE[], const COLUMN[]);
  26. native SQL_SetFloat(dbRowID, const TABLE[], const COLUMN[], Float:myfloat, &Float:result);
  27. native SQL_SetInt(dbRowID, const TABLE[], const COLUMN[], INTEGER, &result);
  28. native SQL_SetString(dbRowID, const TABLE[], const COLUMN[], const STRING[]);
  29. native SQL_Write(const TABLE[]);
  30. */
  31. //#define SQL_FORMATTED_QUERY_DEBUG
  32. #define RANDOM_NUMBER -9761264623162
  33. #define RANDOM_FLOAT -9761264623162.0000
  34. #if defined mysql_query_format
  35. #undef mysql_query_format
  36. #endif
  37. new
  38. bool:FALSE = false;
  39. #define mysql_query_format(%1,%2) do{new fstring[1024];format(fstring,1024,(%1),%2);amysql_query(fstring);}while(FALSE)
  40. stock amysql_query(query[])
  41. {
  42. new
  43. result = mysql_query(query);
  44. #if defined SQL_FORMATTED_QUERY_DEBUG
  45. printf(">> aSQL: [Input[]: %s]", query);
  46. #else
  47. #pragma unused query
  48. #endif
  49. return result;
  50. }
  51. stock SQL_ConnectDatabase()
  52. {
  53. if(!mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS))
  54. {
  55. print(">> aSQL: Couldn't connect at HOST " #SQL_HOST " [Database: " #SQL_DB "] with USER " #SQL_USER " [Password: " #SQL_PASS "]");
  56. print(">> aSQL: Retrying..");
  57. if(!mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS))
  58. {
  59. print(">> aSQL: Couldn't connect at HOST "#SQL_HOST" [Database: "#SQL_DB"] with USER "#SQL_USER" [Password: "#SQL_PASS"]");
  60. print(">> aSQL: Retrying..");
  61. if(!mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS))
  62. {
  63. print(">> aSQL: Couldn't connect at HOST "#SQL_HOST" [Database: "#SQL_DB"] with USER "#SQL_USER" [Password: "#SQL_PASS"]");
  64. print(">> aSQL: Server start has been stopped!");
  65. return 0;
  66. }
  67. }
  68. }
  69. print(">> aSQL: Successfully connected at HOST "#SQL_HOST" [Database: "#SQL_DB"]!");
  70. return 1;
  71. }
  72. stock SQL_DisconnectDatabase()
  73. {
  74. if(mysql_ping() == 1) mysql_close();
  75. print(">> aSQL: Connection to SQL database has been stopped!");
  76. return 1;
  77. }
  78. stock SQL_Checkdb(const TABLE[], const COLUMN[], const DEFINE[])
  79. {
  80. mysql_query_format("CREATE TABLE IF NOT EXISTS `" #SQL_PREFIX "%s` (`row_id` int(11) NOT NULL auto_increment, PRIMARY KEY (`row_id`));", TABLE);
  81. mysql_query_format("SHOW COLUMNS FROM `"#SQL_PREFIX"%s` LIKE '%s'", TABLE, COLUMN);
  82. mysql_store_result();
  83. if (mysql_num_rows())
  84. {
  85. mysql_free_result();
  86. return 1;
  87. }
  88. mysql_free_result();
  89. mysql_query_format("ALTER TABLE `"#SQL_PREFIX"%s` ADD `%s` %s;", TABLE, COLUMN, DEFINE);
  90. return 1;
  91. }
  92. stock SQL_Write(const TABLE[])
  93. {
  94. mysql_query_format("CREATE TABLE IF NOT EXISTS `" #SQL_PREFIX "%s` (`row_id` int(11) NOT NULL auto_increment, PRIMARY KEY (`row_id`));", TABLE);
  95. mysql_query_format("ALTER TABLE `"#SQL_PREFIX"%s` ADD `d_o_c` varchar(50) NOT NULL AFTER `row_id` ;", TABLE);
  96. new
  97. day, month, year, minute, second, hour;
  98. getdate(year, month, day);
  99. gettime(hour, minute, second);
  100. mysql_query_format("INSERT INTO `"#SQL_PREFIX"%s` (`d_o_c`) VALUES ('%02d:%02d:%02d - %02d/%02d/%02d');", TABLE, hour, minute, second, day, month, year);
  101. new
  102. lastid = 0;
  103. lastid = mysql_insert_id();
  104. return lastid;
  105. }
  106. stock SQL_SetInt(dbRowID, const TABLE[], const COLUMN[], INTEGER, &upd_val = RANDOM_NUMBER)
  107. {
  108. SQL_Checkdb(TABLE, COLUMN, "int(20) NOT NULL default '0'");
  109. mysql_query_format("UPDATE `"#SQL_PREFIX"%s` SET `%s` = '%i' WHERE `row_id` = '%i' LIMIT 1;", TABLE, COLUMN, INTEGER, dbRowID);
  110. if(upd_val != RANDOM_NUMBER) upd_val = RANDOM_NUMBER;
  111. return 1;
  112. }
  113. stock SQL_SetFloat(dbRowID, const TABLE[], const COLUMN[], Float:FLOAT, &Float:upd_val = RANDOM_FLOAT)
  114. {
  115. SQL_Checkdb(TABLE, COLUMN, "varchar(50) NOT NULL default '0.0'");
  116. mysql_query_format("UPDATE `"#SQL_PREFIX"%s` SET `%s` = '%f' WHERE `row_id` = '%i' LIMIT 1;", TABLE, COLUMN, FLOAT, dbRowID);
  117. if(upd_val != RANDOM_NUMBER) upd_val = RANDOM_NUMBER;
  118. return 1;
  119. }
  120. stock SQL_SetString(dbRowID, const TABLE[], const COLUMN[], const STRING[])
  121. {
  122. SQL_Checkdb(TABLE, COLUMN, "varchar(500) NOT NULL default '-'");
  123. mysql_query_format("UPDATE `"#SQL_PREFIX"%s` SET `%s` = '%s' WHERE `row_id` = '%i' LIMIT 1;", TABLE, COLUMN, STRING, dbRowID);
  124. return 1;
  125. }
  126. stock SQL_GetInt(dbRowID, const TABLE[], const COLUMN[], &myint = RANDOM_NUMBER)
  127. {
  128. SQL_Checkdb(TABLE, COLUMN, "int(11) NOT NULL default '0'");
  129. new
  130. myid = -1,
  131. QUERY[1024];
  132. format(QUERY, 1024, "SELECT `%s` FROM `"#SQL_PREFIX"%s` WHERE `row_id` = '%i' LIMIT 1;", COLUMN, TABLE, dbRowID);
  133. new
  134. RESULT = amysql_query(QUERY);
  135. if(!RESULT) return mysql_errno();
  136. mysql_store_result();
  137. if(mysql_num_rows() >= 1) myid = mysql_fetch_int();
  138. mysql_free_result();
  139. myint = myid;
  140. return myid;
  141. }
  142. stock SQL_GetString(dbRowID, const TABLE[], const COLUMN[])
  143. {
  144. SQL_Checkdb(TABLE, COLUMN, "varchar(500) NOT NULL default '-'");
  145. new
  146. string[1000],
  147. QUERY[1024];
  148. format(QUERY, 1024, "SELECT `%s` FROM `"#SQL_PREFIX"%s` WHERE `row_id` = '%i' LIMIT 1;", COLUMN, TABLE, dbRowID);
  149. new
  150. RESULT = amysql_query(QUERY);
  151. if(!RESULT) {
  152. mysql_errno();
  153. return string;
  154. }
  155. mysql_store_result();
  156. if(mysql_num_rows() >= 1)
  157. {
  158. if(mysql_retrieve_row())
  159. {
  160. mysql_fetch_field_row(string, COLUMN);
  161. }
  162. }
  163. mysql_free_result();
  164. return string;
  165. }
  166. stock Float:SQL_GetFloat(dbRowID, const TABLE[], const COLUMN[], &Float:result = RANDOM_FLOAT)
  167. {
  168. SQL_Checkdb(TABLE, COLUMN, "varchar(50) NOT NULL default '0.0'");
  169. new
  170. Float:myfloat = 0.0,
  171. string[100],
  172. QUERY[1024];
  173. format(QUERY, 1024, "SELECT `%s` FROM `"#SQL_PREFIX"%s` WHERE `row_id` = '%i' LIMIT 1;", COLUMN, TABLE, dbRowID);
  174. new
  175. RESULT = amysql_query(QUERY);
  176. if(!RESULT) {
  177. mysql_errno();
  178. return myfloat;
  179. }
  180. mysql_store_result();
  181. if(mysql_num_rows() >= 1)
  182. {
  183. if(mysql_retrieve_row())
  184. {
  185. mysql_fetch_field_row(string, COLUMN);
  186. myfloat = floatstr(string);
  187. }
  188. }
  189. mysql_free_result();
  190. result = myfloat;
  191. return myfloat;
  192. }
  193. stock streql(const string0[], const string1[])
  194. {
  195. if(strlen(string0) == strlen(string1) && strcmp(string0, string1, true, strlen(string0)) == 0) return 1;
  196. return 0;
  197. }
  198. stock md5(forstring[])
  199. {
  200. new
  201. Sendmsg[200];
  202. format(Sendmsg, sizeof(Sendmsg), "%s", MD5_Hash(forstring));
  203. for(new i = 0; i < strlen(Sendmsg); i++)
  204. Sendmsg[i] = tolower(Sendmsg[i]);
  205. return Sendmsg;
  206. }