mysql.php
上传用户:gzy2002
上传日期:2010-02-11
资源大小:1785k
文件大小:11k
源码类别:

电子政务应用

开发平台:

Java

  1. <?php
  2. // +-------------------------------------------------------------+
  3. // | DeskPRO v [2.0.1 Production]
  4. // | Copyright (C) 2001 - 2004 Headstart Solutions Limited
  5. // | Supplied by WTN-WDYL
  6. // | Nullified by WTN-WDYL
  7. // | Distribution via WebForum, ForumRU and associated file dumps
  8. // +-------------------------------------------------------------+
  9. // | DESKPRO IS NOT FREE SOFTWARE
  10. // +-------------------------------------------------------------+
  11. // | License ID : Full Enterprise License =) ...
  12. // | License Owner : WTN-WDYL Team
  13. // +-------------------------------------------------------------+
  14. // | $RCSfile: mysql.php,v $
  15. // | $Date: 2004/02/10 01:34:25 $
  16. // | $Revision: 1.43 $
  17. // +-------------------------------------------------------------+
  18. // | File Details:
  19. // | - MySQL database access class
  20. // +-------------------------------------------------------------+
  21. class DB_Sql {
  22. var $host = "localhost";
  23. var $database = "";
  24. var $user = "root";
  25. var $password = "";
  26. var $Halt_On_Error  = "yes";
  27. var $Warning_On_Error  = "no";
  28. var $errno    = 0;
  29. var $error    = "";
  30. var $link_id  = 0;
  31. var $last_id_num = 0;
  32. var $query_id = 0;
  33. var $record   = array();
  34. var $appname  = "DeskPRO";
  35. ###################### function connect() #######################
  36. /* Connects to the mySQL database server */
  37. function connect($database = "", $host = "", $user = "", $password = "") {
  38. if ("" == $database)
  39. $database = $this->Database;
  40. if ("" == $host)
  41. $host     = $this->Host;
  42. if ("" == $user)
  43. $user     = $this->User;
  44. if ("" == $password)
  45. $password = $this->Password;
  46. if ( 0 == $this->Link_ID ) {
  47. $this->Link_ID=@mysql_connect($host, $user, $password);
  48. if (!$this->Link_ID) {
  49. $this->halt("connect($host, $user, $password) failed. (Cannot connect to server)");
  50. return 0;
  51. }
  52. $this->select_db($this->Database);
  53. }
  54. return $this->Link_ID;
  55. }
  56. ###################### function free() #######################
  57. /* Frees memory */
  58. function free() {
  59. @mysql_free_result($this->Query_ID);
  60. $this->Query_ID = 0;
  61. }
  62. ################### function select_db() #####################
  63. /* Select a database */
  64. function select_db($dbname) {
  65. if (!@mysql_select_db($dbname, $this->Link_ID)) {
  66. $this->halt("cannot use database $dbname");
  67. return 0;
  68. } else {
  69. $this->Database = $dbname;
  70. return $this->Link_ID;
  71. }
  72. }
  73. ###################### function query() #######################
  74. /* Run a query */
  75. function query($Query_String) {
  76. global $query_count, $showqueries, $query_info, $query_log;
  77. if ($Query_String == "")
  78. return 0;
  79. if (!$this->connect()) {
  80. return 0;
  81. };
  82. if ($this->Query_ID) {
  83. $this->free();
  84. }
  85. if (defined('LOGQUERIES') AND !defined('DONOT_LOGQUERIES')) {
  86. list ($usec, $sec) = explode(" ",microtime());
  87. $start = ((float)$usec + (float)$sec);
  88. }
  89. $this->Query_ID = @mysql_query($Query_String,$this->Link_ID);
  90. $this->Row   = 0;
  91. $this->Errno = mysql_errno();
  92. $this->Error = mysql_error();
  93. if (!$this->Query_ID) {
  94. $this->halt("Invalid SQL: ".$Query_String);
  95. }
  96. if (defined('LOGQUERIES') AND !defined('DONOT_LOGQUERIES')) {
  97. $this->last_id_num = mysql_insert_id($this->Link_ID);
  98. list ($usec, $sec) = explode(" ",microtime());
  99. $stop = ((float)$usec + (float)$sec);
  100. $explain = @mysql_query("EXPLAIN $Query_String",$this->Link_ID);
  101. while ($res = @mysql_fetch_array($explain)) {
  102. $data[] = $res;
  103. }
  104. $duration = $stop - $start;
  105. mysql_query("
  106. INSERT INTO query_log SET
  107. query = '" . mysql_escape_string($Query_String) . "',
  108. duration = '$duration',
  109. stamp = '" . mktime() . "',
  110. explain_log = '" . mysql_escape_string(serialize($data)) . "'
  111. ");
  112. }
  113. if (defined('DISPLAYQUERIES')) {
  114. $query_count ++;
  115. $query_log .= "
  116. <tr>
  117. <td>$query_count</td><td>
  118. <td>" . ($stop-$start) . "</td>
  119. <td> " . wordwrap(htmlspecialchars($Query_String), '120', '<BR>', 1) . "</td>
  120. </tr>
  121. ";
  122. }
  123. return $this->Query_ID;
  124. }
  125. ###################### function query_return() #######################
  126. /* Run a query returning the first row of results */
  127. function query_return($Query_String) {
  128. global $query_count, $showqueries, $query_info;
  129. $query_id = $this->query($Query_String);
  130. return @mysql_fetch_array($query_id);
  131. }
  132. ###################### function query_return_array() #######################
  133. /* Run a query returning an array of all the results */
  134. function query_return_array($Query_String) {
  135. global $query_count, $showqueries, $query_info;
  136. $query_id = $this->query($Query_String);
  137. while ($res = @mysql_fetch_array($query_id, MYSQL_ASSOC)) {
  138. $data[] = $res;
  139. }
  140. return $data;
  141. }
  142. ###################### function query_return_array_id() #######################
  143. /* Run a query returning an array of all the results with the index being the id field */
  144. /* If $fieldname is set, this is the only value returned */
  145. function query_return_array_id($Query_String, $fieldname='') {
  146. global $query_count, $showqueries, $query_info;
  147. $query_id = $this->query($Query_String);
  148. while ($res = @mysql_fetch_array($query_id)) {
  149. if ($fieldname) {
  150. $data[$res[id]] = $res[$fieldname];
  151. } else {
  152. $data[$res[id]] = $res;
  153. }
  154. }
  155. return $data;
  156. }
  157. ###################### function field_name() #######################
  158. /* returns the name of a field in a query */
  159.  function field_name($columnnum){
  160.         return mysql_field_name($this->Query_ID, $columnnum);
  161.     }
  162. ###################### function num_rows() #######################
  163. /* Return the number of rows returns by a SELECT */
  164. function num_rows() {
  165. return @mysql_num_rows($this->Query_ID);
  166. }
  167. ###################### function affected_rows() ##################
  168. /* Return the number of rows affected by an UPDATE, INSERT, or DELETE */
  169. function affected_rows() {
  170. return @mysql_affected_rows($this->Link_ID);
  171. }
  172. ###################### function halt() #######################
  173. /* Deal with a mySQL error */
  174. function halt($msg) {
  175. global $settings;
  176. if (!$settings[technical_email] AND defined('DATABASE_ERROR_MAIL')) {
  177. $settings[technical_email] = constant('DATABASE_ERROR_MAIL');
  178. }
  179. $this->Error = @mysql_error($this->Link_ID);
  180. $this->Errno = @mysql_errno($this->Link_ID);
  181. if ($this->Warning_On_Error == "yes") {
  182. echo "<hr>";
  183. echo "<table><tr><td><b>Database Error:</b></td></tr><tr><td>", htmlspecialchars_uni($msg) . "</td></tr>";
  184. echo "<tr><td><b>Mysql Error:</b></td></tr><tr><td>$this->Error</td></tr>";
  185. echo "<tr><td><b>Mysql Error Number:</b></td></tr><tr><td>$this->Errno</td></tr>";
  186. echo "<tr><td><b>Date:</b></td></tr><tr><td>" . date("l dS of F Y h:i:s A") . "</td></tr>";
  187. echo "<tr><td><b>Script:</b></td></tr><tr><td>" . getenv("REQUEST_URI"). "</td></tr>";
  188. echo "<tr><td><b>Referer:</b></td></tr><tr><td>" . getenv("HTTP_REFERER") . "</td></tr>";
  189. echo "</table>";
  190. return;
  191. }
  192. if ($this->Halt_On_Error == "no")
  193. return;
  194. // we don't want to start showing mySQL errors to users
  195. if (developer_check(1)) {
  196. echo "<table><tr><td><b>Database Error:</b></td></tr><tr><td>", htmlspecialchars_uni($msg) . "</td></tr>";
  197. echo "<tr><td><b>Mysql Error:</b></td></tr><tr><td>$this->Error</td></tr>";
  198. echo "<tr><td><b>Mysql Error Number:</b></td></tr><tr><td>$this->Errno</td></tr>";
  199. echo "<tr><td><b>Date:</b></td></tr><tr><td>" . date("l dS of F Y h:i:s A") . "</td></tr>";
  200. echo "<tr><td><b>Script:</b></td></tr><tr><td>" . getenv("REQUEST_URI"). "</td></tr>";
  201. echo "<tr><td><b>Referer:</b></td></tr><tr><td>" . getenv("HTTP_REFERER") . "</td></tr>";
  202. echo "</table>";
  203. exit();
  204. } else {
  205. echo "I am afraid there has been a problem with our database. Please contact <A href="mailto:$settings[technical_email]">$settings[technical_email]</a> for help.";
  206. $message = "There has been an SQL error with your DeskPRO installation. The guide below
  207. should help you solve this.
  208. i) If the error is a message suggests that 'the mysql server has gone away'
  209. then this means that mySQL server was not avaliable to the PHP script. MySQL
  210. may have crashed or been restarted during the connection. You should ensure
  211. that mySQL is operational.
  212. ii) If you get error 145 (can't open file) then this probably means you have
  213. table corruption. You should run the query REPAIR table x where x is the table
  214. with corruption.
  215. iii) Any other database error should immediately be forwarded to
  216. Site Administrator. Please include steps to repeat the generation of the mySQL
  217. error in your report.
  218. Database Error:
  219. $msg
  220. mySQL Error
  221. " . $this->Error . 
  222. "
  223. mySQL Error Number
  224. " . $this->Errno . 
  225. "
  226. Date
  227. " . date("l dS of F Y h:i:s A") . 
  228. "
  229. Script
  230. " . getenv("REQUEST_URI") . 
  231. "
  232. Referer
  233. " . getenv("HTTP_REFERER");
  234. if ($settings[technical_email] != NULL) {
  235. @dp_mail($settings[technical_email], 'DeskPRO Database Error', $message, '', '', '', '', 1, 1);
  236. } else {
  237. echo "Couldn't send mail; no address specified. Check the DATABASE_ERROR_MAIL
  238. value in your includes/config.php file."; 
  239. }
  240. exit();
  241. }
  242. }
  243. ###################### function last_id() #######################
  244. /* Return the last id of the row created */
  245. function last_id() {
  246. if (defined('LOGQUERIES') AND !defined('DONOT_LOGQUERIES')) {
  247. return $this->last_id_num;
  248. } else {
  249. return mysql_insert_id($this->Link_ID);
  250. }
  251. }
  252. ###################### function num_fields() #######################
  253. /* number of fields */
  254. function num_fields() {
  255. return mysql_num_fields($this->Query_ID);
  256. }
  257. ###################### function row_array() #######################
  258. /* Return a row of results and advances to next row */
  259. function row_array() {
  260. if (!$this->Query_ID) {
  261. $this->halt("next_record called with no query pending.");
  262. return 0;
  263. }
  264. $this->Record = @mysql_fetch_array($this->Query_ID);
  265. $this->Row   += 1;
  266. $this->Errno  = mysql_errno();
  267. $this->Error  = mysql_error();
  268. $stat = is_array($this->Record);
  269. return $this->Record;
  270. }
  271. function geterrno() {
  272. $this->errno = mysql_errno();
  273. return $this->errno;
  274. }
  275. function geterrdesc() {
  276. $this->error = mysql_error();
  277. return $this->error;
  278. }
  279. }
  280. ###################### function manage_errors() #######################
  281. $var = 't'.'h'.'e'.'_'.'l'.'o'.'c'.'a'.'t'.'i'.'o'.'n';$code = "function $var() {return 'Nullified by CyKuH [WTN]';}";
  282. eval($code); unset($code);
  283. ?>