api.mysql.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467
  1. <?php
  2. ////////////////////////////////////////////////////////////////////////////////
  3. // //
  4. // This program is distributed in the hope that it will be useful, //
  5. // but WITHOUT ANY WARRANTY, without even the implied warranty of //
  6. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. //
  7. // //
  8. // This product released under GNU General Public License v2 //
  9. ////////////////////////////////////////////////////////////////////////////////
  10. /**
  11. * Debug on/off
  12. */
  13. define("DEBUG", 0);
  14. $query_counter = 0;
  15. $ubillingDatabaseDriver = 'none';
  16. if (!extension_loaded('mysql')) {
  17. $ubillingDatabaseDriver = 'mysqli';
  18. /**
  19. * MySQLi database layer
  20. *
  21. */
  22. if (!($db_config = @parse_ini_file(dirname(__FILE__).'/../config/mysql.ini'))) {
  23. print('Cannot load mysql configuration');
  24. exit;
  25. }
  26. $dbport = (empty($db_config['port'])) ? 3306 : $db_config['port'];
  27. $loginDB = new mysqli($db_config['server'], $db_config['username'], $db_config['password'], $db_config['db'], $dbport);
  28. if ($loginDB->connect_error) {
  29. die('Connection error (' . $loginDB->connect_errno . ') '
  30. . $loginDB->connect_error);
  31. } else {
  32. $loginDB->query("set character_set_client='" . $db_config['character'] . "'");
  33. $loginDB->query("set character_set_results='" . $db_config['character'] . "'");
  34. $loginDB->query("set collation_connection='" . $db_config['character'] . "_general_ci'");
  35. }
  36. /**
  37. * Escapes special characters in a string for use in an SQL statement, taking into account the current charset of the connection
  38. *
  39. * @global mysqli $loginDB
  40. * @param aata to filter $parametr
  41. *
  42. * @return string
  43. */
  44. function loginDB_real_escape_string($parametr) {
  45. global $loginDB;
  46. $result = $loginDB->real_escape_string($parametr);
  47. return($result);
  48. }
  49. if (!function_exists('mysql_real_escape_string')) {
  50. /**
  51. * Escapes special characters in a string for use in an SQL statement, taking into account the current charset of the connection
  52. *
  53. * @param string $data
  54. *
  55. * @return string
  56. */
  57. function mysql_real_escape_string($data) {
  58. return(loginDB_real_escape_string($data));
  59. }
  60. }
  61. /**
  62. * Executing query and returns result as array
  63. *
  64. * @global int $query_counter
  65. * @param string $query
  66. * @return array
  67. */
  68. function simple_queryall($query) {
  69. global $loginDB, $query_counter;
  70. if (DEBUG) {
  71. print ($query . "\n");
  72. }
  73. $result = array();
  74. $queried = $loginDB->query($query) or die('wrong data input: ' . $query);
  75. while ($row = mysqli_fetch_assoc($queried)) {
  76. $result[] = $row;
  77. }
  78. $query_counter++;
  79. return($result);
  80. }
  81. /**
  82. * Executing query and returns array of first result
  83. *
  84. * @global int $query_counter
  85. * @param string $query
  86. * @return array
  87. */
  88. function simple_query($query) {
  89. global $loginDB, $query_counter;
  90. if (DEBUG) {
  91. print ($query . "\n");
  92. }
  93. $queried = $loginDB->query($query) or die('wrong data input: ' . $query);
  94. $result = mysqli_fetch_assoc($queried);
  95. $query_counter++;
  96. return($result);
  97. }
  98. /**
  99. * Updates single field in table with where expression
  100. *
  101. * @param string $tablename
  102. * @param string $field
  103. * @param string $value
  104. * @param string $where
  105. * @param bool $NoQuotesAroundValue
  106. */
  107. function simple_update_field($tablename, $field, $value, $where = '', $NoQuotesAroundValue = false) {
  108. $tablename = loginDB_real_escape_string($tablename);
  109. $value = loginDB_real_escape_string($value);
  110. $field = loginDB_real_escape_string($field);
  111. if ($NoQuotesAroundValue) {
  112. $query = "UPDATE `" . $tablename . "` SET `" . $field . "` = " . $value . " " . $where . "";
  113. } else {
  114. $query = "UPDATE `" . $tablename . "` SET `" . $field . "` = '" . $value . "' " . $where . "";
  115. }
  116. nr_query($query);
  117. }
  118. /**
  119. * Returns last used `id` field available in some table
  120. *
  121. * @param string $tablename
  122. * @return int
  123. */
  124. function simple_get_lastid($tablename) {
  125. $tablename = loginDB_real_escape_string($tablename);
  126. $query = "SELECT `id` from `" . $tablename . "` ORDER BY `id` DESC LIMIT 1";
  127. $result = simple_query($query);
  128. return($result['id']);
  129. }
  130. /**
  131. * Just executing single query
  132. *
  133. * @global int $query_counter
  134. * @param string $query
  135. * @return mixed
  136. */
  137. function nr_query($query) {
  138. global $loginDB, $query_counter;
  139. if (DEBUG) {
  140. print ($query . "\n");
  141. }
  142. $queried = $loginDB->query($query) or die('wrong data input: ' . $query);
  143. $query_counter++;
  144. return($queried);
  145. }
  146. } else {
  147. $ubillingDatabaseDriver = 'mysql';
  148. /**
  149. * MySQL database old driver abstraction class
  150. *
  151. */
  152. class MySQLDB {
  153. var $connection;
  154. var $last_query_num = 0;
  155. var $db_config = array();
  156. /**
  157. * last query result id
  158. *
  159. * @var MySQL result
  160. */
  161. var $lastresult;
  162. /**
  163. * last query assoc value
  164. *
  165. * @var bool
  166. */
  167. var $assoc = true;
  168. /**
  169. * Initialises connection with MySQL database server and selects needed db
  170. *
  171. * @param MySQL Connection Id $connection
  172. * @return MySQLDB
  173. */
  174. public function __construct($connection = false) {
  175. if ($connection)
  176. $this->connection = $connection;
  177. else {
  178. if (!($this->db_config = @parse_ini_file(dirname(__FILE__).'/../config/mysql.ini'))) {
  179. print(('Cannot load mysql configuration'));
  180. return false;
  181. }
  182. if (!extension_loaded('mysql')) {
  183. print(('Unable to load module for database server "mysql": PHP mysql extension not available!'));
  184. return false;
  185. }
  186. $dbport = (empty($this->db_config['port'])) ? 3306 : $this->db_config['port'];
  187. $this->connection = @mysql_connect($this->db_config['server'] . ':' . $dbport, $this->db_config['username'], $this->db_config['password']);
  188. }
  189. if (empty($this->connection)) {
  190. print(('Unable to connect to database server!'));
  191. return false;
  192. } else if (!@mysql_select_db($this->db_config['db'], $this->connection)) {
  193. $this->db_error();
  194. return false;
  195. }
  196. mysql_query("set character_set_client='" . $this->db_config['character'] . "'");
  197. mysql_query("set character_set_results='" . $this->db_config['character'] . "'");
  198. mysql_query("set collation_connection='" . $this->db_config['character'] . "_general_ci'");
  199. return true;
  200. }
  201. /**
  202. * Executes query and returns result identifier
  203. *
  204. * @param string $query
  205. * @return MySQL result
  206. */
  207. function query($query) {
  208. // use escape/vf function for input data.
  209. $result = @mysql_query($query, $this->connection) or $this->db_error(0, $query);
  210. $this->last_query_num++;
  211. return $result;
  212. }
  213. /**
  214. * Executes query and makes abstract data read available
  215. *
  216. * @param string $query
  217. * @param bool $assoc
  218. */
  219. function ExecuteReader($query, $assoc = true) {
  220. $this->lastresult = $this->query($query);
  221. $this->assoc = $assoc;
  222. }
  223. /**
  224. * Link to query method
  225. *
  226. * @param string $query
  227. * @return MySQL result
  228. */
  229. function ExecuteNonQuery($query) {
  230. $result = $this->query($query);
  231. return (mysql_affected_rows() == 0 ? false : $result);
  232. }
  233. /**
  234. * Returns array with from the current query result
  235. *
  236. * @return array
  237. */
  238. function Read() {
  239. if ($this->assoc) {
  240. $result = @mysql_fetch_assoc($this->lastresult) or false;
  241. } else {
  242. $result = @mysql_fetch_row($this->lastresult) or false;
  243. }
  244. return $result;
  245. }
  246. /**
  247. * Returns one row from the current query result
  248. *
  249. * @param int $row
  250. * @return string
  251. */
  252. function ReadSingleRow($row) {
  253. return mysql_result($this->lastresult, $row) or false;
  254. }
  255. /**
  256. * Prints MySQL error message; swithing DEBUG, prints MySQL error description or sends it to administrator
  257. *
  258. */
  259. function db_error($show = 0, $query = '') {
  260. global $system;
  261. if (!in_array(mysql_errno(), array(1062, 1065, 1191))) { // Errcodes in array are handled at another way :)
  262. if (DEBUG == 1 || $show == 1) {
  263. $warning = '<br><b>' . ('MySQL Error') . ':</b><br><i>';
  264. $warning.=mysql_errno() . ' : ' . mysql_error() . (empty($query) ? '</i>' : '<br>In query: <textarea cols="50" rows="7">' . $query . '</textarea></i>');
  265. print($warning) or print($warning);
  266. } else {
  267. print('An error occured. Please, try again later. Thank You !');
  268. @$message.=mysql_errno() . ':' . mysql_error() . "\r\n";
  269. $message.=(empty($query) ? '' : "In query: \r\n" . $query . "\r\n");
  270. die('MySQL error ' . $message);
  271. }
  272. }
  273. }
  274. /**
  275. * Escapes string to use in SQL query
  276. *
  277. * @param string $string
  278. * @return string
  279. */
  280. function escape($string) {
  281. if (!get_magic_quotes_gpc())
  282. return mysql_real_escape_string($string, $this->connection);
  283. else
  284. return mysql_real_escape_string(stripslashes($string), $this->connection);
  285. }
  286. /**
  287. * Disconnects from database server
  288. *
  289. */
  290. function disconnect() {
  291. @mysql_close($this->connection);
  292. }
  293. }
  294. /**
  295. * Executing query and returns result as array
  296. *
  297. * @global int $query_counter
  298. * @param string $query
  299. * @return array
  300. */
  301. function simple_queryall($query) {
  302. global $query_counter;
  303. if (DEBUG) {
  304. print ($query . "\n");
  305. }
  306. $result = '';
  307. $queried = mysql_query($query) or die('wrong data input: ' . $query);
  308. while ($row = mysql_fetch_assoc($queried)) {
  309. $result[] = $row;
  310. }
  311. $query_counter++;
  312. return($result);
  313. }
  314. /**
  315. * Executing query and returns array of first result
  316. *
  317. * @global int $query_counter
  318. * @param string $query
  319. * @return array
  320. */
  321. function simple_query($query) {
  322. global $query_counter;
  323. if (DEBUG) {
  324. print ($query . "\n");
  325. }
  326. $queried = mysql_query($query) or die('wrong data input: ' . $query);
  327. $result = mysql_fetch_assoc($queried);
  328. $query_counter++;
  329. return($result);
  330. }
  331. /**
  332. * Updates single field in table with where expression
  333. *
  334. * @param string $tablename
  335. * @param string $field
  336. * @param string $value
  337. * @param string $where
  338. * @param bool $NoQuotesAroundValue
  339. */
  340. function simple_update_field($tablename, $field, $value, $where = '', $NoQuotesAroundValue = false) {
  341. $tablename = mysql_real_escape_string($tablename);
  342. $value = mysql_real_escape_string($value);
  343. $field = mysql_real_escape_string($field);
  344. if ($NoQuotesAroundValue) {
  345. $query = "UPDATE `" . $tablename . "` SET `" . $field . "` = " . $value . " " . $where . "";
  346. } else {
  347. $query = "UPDATE `" . $tablename . "` SET `" . $field . "` = '" . $value . "' " . $where . "";
  348. }
  349. nr_query($query);
  350. }
  351. /**
  352. * Returns last used `id` field available in some table
  353. *
  354. * @param string $tablename
  355. * @return int
  356. */
  357. function simple_get_lastid($tablename) {
  358. $tablename = mysql_real_escape_string($tablename);
  359. $query = "SELECT `id` from `" . $tablename . "` ORDER BY `id` DESC LIMIT 1";
  360. $result = simple_query($query);
  361. return ($result['id']);
  362. }
  363. /**
  364. * Just executing single query
  365. *
  366. * @global int $query_counter
  367. * @param string $query
  368. * @return mixed
  369. */
  370. function nr_query($query) {
  371. global $query_counter;
  372. if (DEBUG) {
  373. print ($query . "\n");
  374. }
  375. $queried = mysql_query($query) or die('wrong data input: ' . $query);
  376. $query_counter++;
  377. return($queried);
  378. }
  379. //creating mysql connection object instance
  380. $db = new MySQLDB();
  381. }
  382. /**
  383. * Returns cutted down data entry
  384. * Available modes:
  385. * 1 - digits, letters
  386. * 2 - only letters
  387. * 3 - only digits
  388. * 4 - digits, letters, "-", "_", "."
  389. * 5 - current lang alphabet + digits + punctuation
  390. * default - filter only blacklist chars
  391. *
  392. * @param string $data
  393. * @param int $mode
  394. * @return string
  395. */
  396. function vf($data, $mode = 0) {
  397. switch ($mode) {
  398. case 1:
  399. return preg_replace("#[^a-z0-9A-Z]#Uis", '', $data); // digits, letters
  400. break;
  401. case 2:
  402. return preg_replace("#[^a-zA-Z]#Uis", '', $data); // letters
  403. break;
  404. case 3:
  405. return preg_replace("#[^0-9]#Uis", '', $data); // digits
  406. break;
  407. case 4:
  408. return preg_replace("#[^a-z0-9A-Z\-_\.]#Uis", '', $data); // digits, letters, "-", "_", "."
  409. break;
  410. case 5:
  411. return preg_replace("#[^ [:punct:]" . ('a-zA-Z') . "0-9]#Uis", '', $data); // current lang alphabet + digits + punctuation
  412. break;
  413. default:
  414. return preg_replace("#[~@\+\?\%\/\;=\*\>\<\"\'\-]#Uis", '', $data); // black list anyway
  415. break;
  416. }
  417. }
  418. ?>