欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

使用单例模式实现mysql类

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

mysql