/system/database/sqlsrv.php

https://github.com/ichraffsnicht/ClanSphere-Enhanced · PHP · 270 lines · 225 code · 43 blank · 2 comment · 38 complexity · 4fcb8fc3230770dc2a1fb6b267d19da9 MD5 · raw file

  1. <?php
  2. // ClanSphere 2010 - www.clansphere.net
  3. // $Id$
  4. function cs_sql_connect($cs_db, $test = 0) {
  5. $error = '';
  6. if(!extension_loaded('sqlsrv')) {
  7. $error = 'PHP extension sqlsrv must be activated!';
  8. }
  9. else {
  10. $cn_info = array('UID' => $cs_db['user'], 'PWD' => $cs_db['pwd'], 'Database' => $cs_db['name']);
  11. $connect = sqlsrv_connect($cs_db['place'], $cn_info) OR $error = cs_sql_error();
  12. }
  13. if(empty($test) AND empty($error)) {
  14. return $connect;
  15. }
  16. elseif(empty($test)) {
  17. cs_error_sql(__FILE__, 'cs_sql_connect', $error, 1);
  18. }
  19. else {
  20. return $error;
  21. }
  22. }
  23. function cs_sql_count($cs_file,$sql_table,$sql_where = 0, $distinct = 0) {
  24. global $cs_db;
  25. $row = empty($distinct) ? '*' : 'DISTINCT ' . $distinct;
  26. $sql_query = 'SELECT COUNT(' . $row . ') FROM ' . $cs_db['prefix'] . '_' . $sql_table;
  27. $sql_query .= empty($sql_where) ? '' : ' WHERE ' . $sql_where;
  28. $sql_query = str_replace('{pre}',$cs_db['prefix'],$sql_query);
  29. if (!$sql_data = sqlsrv_query($cs_db['con'], $sql_query)) {
  30. cs_error_sql($cs_file, 'cs_sql_count', cs_sql_error(0, $sql_query));
  31. return NULL;
  32. }
  33. sqlsrv_fetch($sql_data);
  34. $sql_result = sqlsrv_get_field($sql_data, 0);
  35. sqlsrv_free_stmt($sql_data);
  36. cs_log_sql($cs_file, $sql_query);
  37. return $sql_result;
  38. }
  39. function cs_sql_delete($cs_file,$sql_table,$sql_id,$sql_field = 0) {
  40. global $cs_db;
  41. settype($sql_id,'integer');
  42. if (empty($sql_field)) {
  43. $sql_field = $sql_table . '_id';
  44. }
  45. $sql_delete = 'DELETE FROM ' . $cs_db['prefix'] . '_' . $sql_table;
  46. $sql_delete .= ' WHERE ' . $sql_field . ' = ' . $sql_id;
  47. sqlsrv_query($cs_db['con'], $sql_delete) or cs_error_sql($cs_file, 'cs_sql_delete', cs_sql_error(0, $sql_delete));
  48. cs_log_sql($cs_file, $sql_delete,1);
  49. }
  50. function cs_sql_escape($string) {
  51. return str_replace("'","''",(string) $string);
  52. }
  53. function cs_sql_insert($cs_file, $sql_table, $sql_cells, $sql_content) {
  54. global $cs_db;
  55. $max = count($sql_cells);
  56. $set = " (";
  57. for ($run = 0; $run < $max; $run++) {
  58. $set .= $sql_cells[$run];
  59. if ($run != $max - 1) {
  60. $set .= ",";
  61. }
  62. }
  63. $set .= ") VALUES ('";
  64. for ($run = 0; $run < $max; $run++) {
  65. $set .= str_replace("'","''",(string) $sql_content[$run]);
  66. if ($run != $max - 1) {
  67. $set .= "','";
  68. }
  69. }
  70. $set .= "')";
  71. $sql_insert = 'INSERT INTO ' . $cs_db['prefix'] . '_' . $sql_table . $set;
  72. sqlsrv_query($cs_db['con'], $sql_insert) or cs_error_sql($cs_file, 'cs_sql_insert', cs_sql_error(0, $sql_insert));
  73. cs_log_sql($cs_file, $sql_insert);
  74. }
  75. function cs_sql_insertid($cs_file) {
  76. $found = cs_sql_query($cs_file, 'SELECT @@IDENTITY AS lastval', 1);
  77. $lastval = isset($found['more'][0]['lastval']) ? $found['more'][0]['lastval'] : NULL;
  78. return $lastval;
  79. }
  80. function cs_sql_option($cs_file, $mod) {
  81. global $cs_db, $cs_template;
  82. static $options = array();
  83. if (empty($options[$mod])) {
  84. if (!$options[$mod] = cs_cache_load('op_' . $mod)) {
  85. $sql_query = 'SELECT options_name, options_value FROM ' . $cs_db['prefix'] . '_' . 'options';
  86. $sql_query .= " WHERE options_mod = '" . $mod . "'";
  87. $sql_data = sqlsrv_query($cs_db['con'], $sql_query) or cs_error_sql($cs_file, 'cs_sql_option', cs_sql_error(0, $sql_query), 1);
  88. while ($sql_result = sqlsrv_fetch_array($sql_data, SQLSRV_FETCH_ASSOC)) {
  89. $name = $sql_result['options_name'];
  90. $new_result[$name] = $sql_result['options_value'];
  91. }
  92. sqlsrv_free_stmt($sql_data);
  93. cs_log_sql($cs_file, $sql_query);
  94. if(count($cs_template)) {
  95. foreach($cs_template AS $navlist => $value) {
  96. if($navlist == $mod) {
  97. $new_result = array_merge($new_result,$value);
  98. }
  99. }
  100. }
  101. $options[$mod] = isset($new_result) ? $new_result : 0;
  102. cs_cache_save('op_' . $mod, $options[$mod]);
  103. }
  104. }
  105. return $options[$mod];
  106. }
  107. function cs_sql_query($cs_file, $sql_query, $more = 0) {
  108. global $cs_db;
  109. $sql_query = str_replace('{pre}', $cs_db['prefix'], $sql_query);
  110. if ($sql_data = sqlsrv_query($cs_db['con'], $sql_query)) {
  111. $result = array('affected_rows' => sqlsrv_rows_affected($sql_data));
  112. if(!empty($more)) {
  113. while ($sql_result = sqlsrv_fetch_array($sql_data, SQLSRV_FETCH_ASSOC)) {
  114. $result['more'][] = $sql_result;
  115. }
  116. sqlsrv_free_stmt($sql_data);
  117. }
  118. }
  119. else {
  120. cs_error_sql($cs_file, 'cs_sql_query', cs_sql_error(0, $sql_query));
  121. $result = 0;
  122. }
  123. cs_log_sql($cs_file, $sql_query);
  124. return $result;
  125. }
  126. function cs_sql_replace($replace) {
  127. $replace = preg_replace("={optimize}(.*?[;])=si",'',$replace);
  128. $replace = str_replace('{serial}','int IDENTITY(1,1)',$replace);
  129. $replace = str_replace('{engine}','',$replace);
  130. return preg_replace("=int\((.*?)\)=si",'int',$replace);
  131. }
  132. function cs_sql_select($cs_file, $sql_table, $sql_select, $sql_where = 0, $sql_order = 0, $first = 0, $max = 1, $cache = 0) {
  133. if (!empty($cache) && $return = cs_cache_load($cache)) {
  134. return $return;
  135. }
  136. global $cs_db;
  137. $first = ($first < 0) ? 0 : (int) $first;
  138. $max = ($max < 0) ? 20 : (int) $max;
  139. $run = 0;
  140. if(!empty($max) OR $sql_order == '{random}') {
  141. $sql_select = ' TOP ' . $max . ' ' . $sql_select;
  142. if(!empty($first)) {
  143. $cell = explode(' ',$sql_table);
  144. $same_qry = ' ' . $cell[0] . '_id FROM ' . $cs_db['prefix'] . '_' . $sql_table;
  145. $same_qry .= empty($sql_where) ? '' : ' WHERE ' . $sql_where;
  146. $same_qry .= empty($sql_order) ? '' : ' ORDER BY ' . $sql_order;
  147. $sql_notin = '(' . $cell[0] . '_id NOT IN (SELECT TOP ' . $first . ' ' . $same_qry . '))';
  148. $sql_where = empty($sql_where) ? $sql_notin : $sql_notin . ' AND ';
  149. }
  150. }
  151. $sql_query = 'SELECT ' . $sql_select . ' FROM ' . $cs_db['prefix'] . '_' . $sql_table;
  152. if (!empty($sql_where)) {
  153. $sql_query .= ' WHERE ' . $sql_where;
  154. }
  155. if (!empty($sql_order)) {
  156. $sql_query .= ' ORDER BY ' . str_replace('{random}', 'NEWID()', $sql_order);
  157. }
  158. $sql_query = str_replace('{pre}', $cs_db['prefix'], $sql_query);
  159. if (!$sql_data = sqlsrv_query($cs_db['con'], $sql_query)) {
  160. cs_error_sql($cs_file, 'cs_sql_select', cs_sql_error(0, $sql_query));
  161. return NULL;
  162. }
  163. if ($max == 1) {
  164. $new_result = sqlsrv_fetch_array($sql_data, SQLSRV_FETCH_ASSOC);
  165. }
  166. else {
  167. while ($sql_result = sqlsrv_fetch_array($sql_data, SQLSRV_FETCH_ASSOC)) {
  168. $new_result[$run] = $sql_result;
  169. $run++;
  170. }
  171. }
  172. sqlsrv_free_stmt($sql_data);
  173. cs_log_sql($cs_file, $sql_query);
  174. if (!empty($new_result)) {
  175. if (!empty($cache))
  176. cs_cache_save($cache, $new_result);
  177. return $new_result;
  178. }
  179. return NULL;
  180. }
  181. function cs_sql_update($cs_file, $sql_table, $sql_cells, $sql_content, $sql_id, $sql_where = 0, $sql_log = 1) {
  182. global $cs_db;
  183. settype($sql_id, 'integer');
  184. $max = count($sql_cells);
  185. $set = ' SET ';
  186. for ($run = 0; $run < $max; $run++) {
  187. $set .= $sql_cells[$run] . "='" . str_replace("'","''",(string) $sql_content[$run]);
  188. if ($run != $max - 1) {
  189. $set .= "', ";
  190. }
  191. }
  192. $set .= "' ";
  193. $sql_update = 'UPDATE ' . $cs_db['prefix'] . '_' . $sql_table . $set . ' WHERE ';
  194. if (empty($sql_where)) {
  195. $sql_update .= $sql_table . '_id = ' . $sql_id;
  196. }
  197. else {
  198. $sql_update .= $sql_where;
  199. }
  200. sqlsrv_query($cs_db['con'], $sql_update) or cs_error_sql($cs_file, 'cs_sql_update', cs_sql_error(0, $sql_update));
  201. cs_log_sql($cs_file, $sql_update, $sql_log);
  202. }
  203. function cs_sql_version($cs_file) {
  204. global $cs_db;
  205. $sql_infos = array('data_free' => 0, 'data_size' => 0, 'index_size' => 0, 'tables' => 0, 'names' => array());
  206. $client = sqlsrv_client_info($cs_db['con']);
  207. $server = sqlsrv_server_info($cs_db['con']);
  208. $sql_infos['encoding'] = 'default';
  209. $sql_infos['type'] = 'Microsoft SQL Server (sqlsrv)';
  210. $sql_infos['client'] = $client['DriverVer'] . ' - ODBC ' . $client['DriverODBCVer'];
  211. $sql_infos['host'] = $server['SQLServerName'];
  212. $sql_infos['server'] = $server['SQLServerVersion'];
  213. return $sql_infos;
  214. }
  215. function cs_sql_error($object = 0, $query = 0) {
  216. global $cs_db;
  217. $errors_array = sqlsrv_errors();
  218. $code = isset($errors_array[0]['code']) ? $errors_array[0]['code'] : 0;
  219. $error_string = isset($errors_array[0]['message']) ? $errors_array[0]['message'] : '';
  220. if(!empty($code))
  221. $error_string = $code . ' - ' . $error_string;
  222. if(!empty($query))
  223. $error_string .= ' --Query: ' . $query;
  224. return $error_string;
  225. }