前几天没事在网上转发现了一个类,记录下来:

  1. <?php
  2. Class DB {
  3.  
  4. private $link_id;
  5. private $handle;
  6. private $is_log;
  7. private $time;
  8.  
  9. //构造函数
  10. public function __construct() {
  11. $this->time = $this->microtime_float();
  12. require_once("config.db.php");
  13. $this->connect($db_config["hostname"], $db_config["username"], $db_config["password"], $db_config["database"], $db_config["pconnect"]);
  14. $this->is_log = $db_config["log"];
  15. if($this->is_log){
  16. $handle = fopen($db_config["logfilepath"]."dblog.txt", "a+");
  17. $this->handle=$handle;
  18. }
  19. }
  20.  
  21. //数据库连接
  22. public function connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect = 0,$charset='utf8') {
  23. if( $pconnect==0 ) {
  24. $this->link_id = @mysql_connect($dbhost, $dbuser, $dbpw, true);
  25. if(!$this->link_id){
  26. $this->halt("数据库连接失败");
  27. }
  28. } else {
  29. $this->link_id = @mysql_pconnect($dbhost, $dbuser, $dbpw);
  30. if(!$this->link_id){
  31. $this->halt("数据库持久连接失败");
  32. }
  33. }
  34. if(!@mysql_select_db($dbname,$this->link_id)) {
  35. $this->halt('数据库选择失败');
  36. }
  37. @mysql_query("set names ".$charset);
  38. }
  39.  
  40. //查询
  41. public function query($sql) {
  42. $this->write_log("查询 ".$sql);
  43. $query = mysql_query($sql,$this->link_id);
  44. if(!$query) $this->halt('Query Error: ' . $sql);
  45. return $query;
  46. }
  47.  
  48. //获取一条记录(MYSQL_ASSOC,MYSQL_NUM,MYSQL_BOTH)
  49. public function get_one($sql,$result_type = MYSQL_ASSOC) {
  50. $query = $this->query($sql);
  51. $rt =& mysql_fetch_array($query,$result_type);
  52. $this->write_log("获取一条记录 ".$sql);
  53. return $rt;
  54. }
  55.  
  56. //获取全部记录
  57. public function get_all($sql,$result_type = MYSQL_ASSOC) {
  58. $query = $this->query($sql);
  59. $i = 0;
  60. $rt = array();
  61. while($row =& mysql_fetch_array($query,$result_type)) {
  62. $rt[$i]=$row;
  63. $i++;
  64. }
  65. $this->write_log("获取全部记录 ".$sql);
  66. return $rt;
  67. }
  68.  
  69. //插入
  70. public function insert($table,$dataArray) {
  71. $field = "";
  72. $value = "";
  73. if( !is_array($dataArray) || count($dataArray)<=0) {
  74. $this->halt('没有要插入的数据');
  75. return false;
  76. }
  77. while(list($key,$val)=each($dataArray)) {
  78. $field .="$key,";
  79. $value .="'$val',";
  80. }
  81. $field = substr( $field,0,-1);
  82. $value = substr( $value,0,-1);
  83. $sql = "insert into $table($field) values($value)";
  84. $this->write_log("插入 ".$sql);
  85. if(!$this->query($sql)) return false;
  86. return true;
  87. }
  88.  
  89. //更新
  90. public function update( $table,$dataArray,$condition="") {
  91. if( !is_array($dataArray) || count($dataArray)<=0) {
  92. $this->halt('没有要更新的数据');
  93. return false;
  94. }
  95. $value = "";
  96. while( list($key,$val) = each($dataArray))
  97. $value .= "$key = '$val',";
  98. $value .= substr( $value,0,-1);
  99. $sql = "update $table set $value where 1=1 and $condition";
  100. $this->write_log("更新 ".$sql);
  101. if(!$this->query($sql)) return false;
  102. return true;
  103. }
  104.  
  105. //删除
  106. public function delete( $table,$condition="") {
  107. if( empty($condition) ) {
  108. $this->halt('没有设置删除的条件');
  109. return false;
  110. }
  111. $sql = "delete from $table where 1=1 and $condition";
  112. $this->write_log("删除 ".$sql);
  113. if(!$this->query($sql)) return false;
  114. return true;
  115. }
  116.  
  117. //返回结果集
  118. public function fetch_array($query, $result_type = MYSQL_ASSOC){
  119. $this->write_log("返回结果集");
  120. return mysql_fetch_array($query, $result_type);
  121. }
  122.  
  123. //获取记录条数
  124. public function num_rows($results) {
  125. if(!is_bool($results)) {
  126. $num = mysql_num_rows($results);
  127. $this->write_log("获取的记录条数为".$num);
  128. return $num;
  129. } else {
  130. return 0;
  131. }
  132. }
  133.  
  134. //释放结果集
  135. public function free_result() {
  136. $void = func_get_args();
  137. foreach($void as $query) {
  138. if(is_resource($query) && get_resource_type($query) === 'mysql result') {
  139. return mysql_free_result($query);
  140. }
  141. }
  142. $this->write_log("释放结果集");
  143. }
  144.  
  145. //获取最后插入的id
  146. public function insert_id() {
  147. $id = mysql_insert_id($this->link_id);
  148. $this->write_log("最后插入的id为".$id);
  149. return $id;
  150. }
  151.  
  152. //关闭数据库连接
  153. protected function close() {
  154. $this->write_log("已关闭数据库连接");
  155. return @mysql_close($this->link_id);
  156. }
  157.  
  158. //错误提示
  159. private function halt($msg='') {
  160. $msg .= "\r\n".mysql_error();
  161. $this->write_log($msg);
  162. die($msg);
  163. }
  164.  
  165. //析构函数
  166. public function __destruct() {
  167. $this->free_result();
  168. $use_time = ($this-> microtime_float())-($this->time);
  169. $this->write_log("完成整个查询任务,所用时间为".$use_time);
  170. if($this->is_log){
  171. fclose($this->handle);
  172. }
  173. }
  174.  
  175. //写入日志文件
  176. public function write_log($msg=''){
  177. if($this->is_log){
  178. $text = date("Y-m-d H:i:s")." ".$msg."\r\n";
  179. fwrite($this->handle,$text);
  180. }
  181. }
  182.  
  183. //获取毫秒数
  184. public function microtime_float() {
  185. list($usec, $sec) = explode(" ", microtime());
  186. return ((float)$usec + (float)$sec);
  187. }
  188. }
  189.  
  190. ?>
  1. <?php
  2. $db_config["hostname"] = "localhost"; //服务器地址
  3. $db_config["username"] = "root"; //数据库用户名
  4. $db_config["password"] = "123"; //数据库密码
  5. $db_config["database"] = "test"; //数据库名称
  6. $db_config["charset"] = "utf8";//数据库编码
  7. $db_config["pconnect"] = 1;//开启持久连接
  8. $db_config["log"] = 1;//开启日志
  9. $db_config["logfilepath"] = './';//开启日志
  10. ?>

PHP Mysql类【转】的更多相关文章

  1. 完善ecshop的mysql类

    前篇文章中,我提及到了如何<提取ecshop的mysql类>.但是没有数据库前缀的写法 废话不说,上步骤(目录结构请参考提取ecshop的mysql类) 修改connfig.php为 &l ...

  2. 提取ecshop的mysql类

    在下一篇文章中,我还将介绍如何完善ecshop的mysql类,使用ecshop的数据库前缀 下载ecshop后,解压缩,进入目录upload/includes,复制里面的cls_mysql.php放进 ...

  3. php四个常用类封装 :MySQL类、 分页类、缩略图类、上传类;;分页例子;

    Mysql类 <?php /** * Mysql类 */ class Mysql{ private static $link = null;//数据库连接 /** * 私有的构造方法 */ pr ...

  4. 简单的php Mysql类(查询 删除 更新)

    php Mysql类一般都包括了几乎我们常用的数据库操作方法,这里只提供了查询 删除 更新三种操作,算不是很全只是一个简单的数据库查询类了.      代码如下 复制代码 class mysql { ...

  5. 简单的一个MySQL类的实现:

    '''定义MySQL类:1.对象有id.host.port三个属性2.定义工具create_id,在实例化时为每个对象随机生成id,保证id唯一3.提供两种实例化方式,方式一:用户传入host和por ...

  6. C#---数据库访问通用类、Access数据库操作类、mysql类 .[转]

    原文链接 //C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using Sy ...

  7. C#---数据库访问通用类、Access数据库操作类、mysql类 .

    //C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using System. ...

  8. 封装mysql类

    类: <?phpheader("content-type:text/html;charset=utf-8");//封装一个类/*掌握满足单例模式的必要条件(1)私有的构造方法 ...

  9. VBA Mysql 类

    Option Explicit '==================================== 声明属性 =================================Private ...

随机推荐

  1. The Doors - POJ 1556 (线段相交)

    题目大意:有一个房间(左上角(0,10),右下角(10,0)),然后房间里有N面墙,每面墙上都有两个门,求出来从初始点(0,5),到达终点(10,5)的最短距离.   分析:很明显根据两点之间直线最短 ...

  2. assembly的说明

    Assembly SampleAssembly; // Instantiate a target object. Int32 Integer1 = new Int32(); Type Type1; / ...

  3. java James

    使用JavaMail发送电子邮件(案例) 需求: 使用JavaMail技术,实现从A账户给B账户发送一封电子邮件,标题为"会议通知",邮件内容为"XX你好!请于明天下午1 ...

  4. java 深clone和浅clone

    1. clone类 public class Person implements Cloneable, Serializable{ /** * */ private static final long ...

  5. TOJ3744(Transportation Costs)

    Transportation Costs   Time Limit(Common/Java):2000MS/6000MS     Memory Limit:65536KByte Total Submi ...

  6. [Javascript] Array - join()

    The join() method joins all elements of an array into a string. var name = 'shane osbourne'; var upp ...

  7. QtXML 举例

    QT读取xml有2个方法 对于xml数据比较大的就要用QXmlStreamReader 对于数据比较小的就用QDomDocument,这个比较方便 我这里就是以QDomDocument为主要内容,讲解 ...

  8. Java的演变过程

    1. 1996.01.23 JDK1.0 代号Oak:212个类.8个包: 2. 1997.02.19 JDK1.1 504个类.23个包: Java Bean.远程方法调用(RMI).JAR文件格式 ...

  9. Java基础知识强化之集合框架笔记24:ArrayList存储自定义对象并遍历

    1. ArrayList存储自定义对象并遍历 2. 代码示例: Student.java,如下: package cn.itcast_01; public class Student { privat ...

  10. Customizing the Test Runner

    There are several situations where you want to customize Robolectric's test runner to perform some o ...