当前位置:Gxlcms > PHP教程 > 使用单例模式实现mysql类

使用单例模式实现mysql类

时间:2021-07-01 10:21:17 帮助过:8人阅读

  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

人气教程排行