PHP基于单例模式实现的mysql类

这篇文章主要介绍了PHP基于单例模式实现的mysql类,涉及PHP基于单例模式封装对MySQL数据库的连接及查询相关技巧,需要的朋友可以参考下。

本文实例讲述了PHP基于单例模式实现的mysql类,分享给大家供大家参考,具体如下:

  1. <?php
  2. defined('ACC')||exit('Access Denied');
  3. // 封装mysql操作类,包括连接功能,及查询功能.
  4. class mysql extends absdb{
  5. protected static $ins = null;
  6. protected $host; // 主机名
  7. protected $user; // 用户名
  8. protected $passwd; // 密码
  9. protected $db; // 数据库名
  10. protected $port; // 端口
  11. protected $conn = null;
  12. // 在内部操作,获得一个对象
  13. public static function getIns() {
  14. if(self::$ins === null) {
  15. self::$ins = new self();
  16. }
  17. $conf = conf::getIns();
  18. self::$ins->host = $conf->host;
  19. self::$ins->user = $conf->user;
  20. self::$ins->passwd = $conf->pwd;
  21. self::$ins->db = $conf->db;
  22. self::$ins->port = $conf->port;
  23. self::$ins->connect();
  24. self::$ins->select_db();
  25. self::$ins->setChar();
  26. return self::$ins;
  27. }
  28. // 不让外部做new操作,
  29. protected function __construct() {
  30. }
  31. // 连接数据库
  32. public function connect() {
  33. $this->conn = @mysql_connect($this->host,$this->user,$this->passwd,$this->port);
  34. if(!$this->conn) {
  35. $error = new Exception('数据库连不上',9);
  36. throw $error;
  37. }
  38. }
  39. // 发送sql查询
  40. public function query($sql) {
  41. $rs = mysql_query($sql,$this->conn);
  42. if(!$rs) {
  43. log::write($sql);
  44. }
  45. return $rs;
  46. }
  47. // 封装一个getAll方法
  48. // 参数:$sql
  49. // 返回: array,false
  50. public function getAll($sql) {
  51. $rs = $this->query($sql);
  52. if(!$rs) {
  53. return false;
  54. }
  55. $list = array();
  56. while($row = mysql_fetch_assoc($rs)) {
  57. $list[] = $row;
  58. }
  59. return $list;
  60. }
  61. // 封装一个getRow方法
  62. // 参数:$sql
  63. // 返回: array,false
  64. public function getRow($sql) {
  65. $rs = $this->query($sql);
  66. if(!$rs) {
  67. return false;
  68. }
  69. return mysql_fetch_assoc($rs);
  70. }
  71. // 封装一个getOne方法,
  72. // 参数: $sql
  73. // 返回: int,str(单一的值)
  74. public function getOne($sql) {
  75. $rs = $this->query($sql);
  76. if(!$rs) {
  77. return false;
  78. }
  79. $tmp = mysql_fetch_row($rs);
  80. return $tmp[0];
  81. }
  82. // 封装一个afftect_rows()方法
  83. // 参数:无
  84. // 返回 int 受影响行数
  85. public function affected_rows() {
  86. return mysql_affected_rows($this->conn);
  87. }
  88. // 返回最新生成的auto_increment列的值
  89. public function last_id() {
  90. return mysql_insert_id($this->conn);
  91. }
  92. // 选库函数
  93. public function select_db() {
  94. $sql = 'use ' . $this->db;
  95. return $this->query($sql);
  96. }
  97. // 设置字符集的函数
  98. public function setChar() {
  99. $sql = 'set names utf8';
  100. return $this->query($sql);
  101. }
  102. // 自动生成insert语句,update语句并执行
  103. public function autoExecute($data,$table,$act='insert',$where='') {
  104. if($act == 'insert') {
  105. $sql = 'insert into ' . $table . ' (';
  106. $sql .= implode(',',(array_keys($data)));
  107. $sql .= ') values (\'';
  108. $sql .= implode("','",array_values($data));
  109. $sql .= "')";
  110. } else if($act == 'update') {
  111. if(!trim($where)) {
  112. return false;
  113. }
  114. $sql = 'update ' . $table . ' set ';
  115. foreach($data as $k=>$v) {
  116. $sql .= $k;
  117. $sql .= '=';
  118. $sql .= "'".$v."',";
  119. }
  120. $sql = substr($sql,0,-1);
  121. $sql .= ' where ';
  122. $sql .= $where;
  123. } else {
  124. return false;
  125. }
  126. //return $sql;
  127. return $this->query($sql);
  128. }
  129. }