1 <?php 2 error_reporting(E_ALL ^ E_DEPRECATED); 3 4 //數據庫操做類 5 class MySQLDB{ 6 7 //屬性--必要的信息 8 private $_host; //主機 9 private $_port; //端口 10 private $_user; //用戶名 11 private $_pass; //密碼 12 private $_charset;//字符集 13 private $_dbname; //默認數據庫 14 15 //屬性--運行時生成 16 public $_link; //mysql link 資源 17 18 private static $_instance; 19 public static function getInstance($params=array()){ 20 if(!self::$_instance instanceof self){ 21 self::$_instance = new self($params); 22 } 23 return self::$_instance; 24 } 25 private function __clone(){} 26 27 /* 28 * 構造方法 29 * @param $param=array() array 關聯數組 須要六個屬性值 30 */ 31 private function __construct($params=array()){ 32 //初始化屬性 33 $this->_initParams($params); 34 //鏈接數據庫服務器 35 $this->_connect(); 36 //設定字符集 37 $this->_setCharset(); 38 //選擇默認數據 39 $this->_selectDB(); 40 } 41 42 /* 43 * 初始化數據庫服務器參數 44 */ 45 private function _initParams($params){ 46 $this->_host = isset($params['host'])?$params['host']:'127.0.0.1'; //本機 47 $this->_port = isset($params['port'])?$params['port']:'3306'; //3306 48 $this->_user = isset($params['user'])?$params['user']:''; //匿名用戶 49 $this->_pass = isset($params['pass'])?$params['pass']:''; //沒有密碼 50 $this->_charset = isset($params['charset'])?$params['charset']:'utf8'; //utf8 51 $this->_dbname = isset($params['dbname'])?$params['dbname']:''; //表示不用選擇默認數據庫 52 } 53 54 55 /* 56 * 鏈接數據庫服務器 57 */ 58 private function _connect(){ 59 //127.0.0.1:3306 60 if($link = mysql_connect("$this->_host:$this->_port",$this->_user,$this->_pass)){ 61 //成功 62 $this->_link = $link; 63 }else{ 64 //失敗,強制腳本結束,提示錯誤信息 65 die("-_-!,鏈接數據庫服務器失敗,請肯定鏈接選項"); 66 } 67 } 68 69 /* 70 * 設定指定字符集 71 */ 72 private function _setCharset(){ 73 $sql = "set names $this->_charset"; 74 if(mysql_query($sql,$this->_link)){ 75 //成功 76 }else{ 77 //執行失敗給出錯誤信息 78 echo '-_-!SQL執行失敗<br/>'; 79 echo '錯誤的SQL爲:',$sql,'<br/>'; 80 echo '錯誤代碼爲:',mysql_errno($this->_link),'<br/>'; 81 echo '錯誤信息爲:',mysql_error($this->_link); 82 die; 83 } 84 } 85 86 /* 87 * 選擇默認數據庫 88 * 若是沒有指定,則不選擇 89 */ 90 private function _selectDB(){ 91 //判斷是否須要選擇默認數據庫,表示不須要,防止爲0 92 if($this->_dbname !== ''){ 93 //不爲空,才選擇數據庫 94 $sql = "use `$this->_dbname`"; 95 if(mysql_query($sql,$this->_link)){ 96 //成功 97 }else{ 98 //執行失敗給出錯誤信息 99 echo '-_-!SQL執行失敗<br/>'; 100 echo '錯誤的SQL爲:',$sql,'<br/>'; 101 echo '錯誤代碼爲:',mysql_errno($this->_link),'<br/>'; 102 echo '錯誤信息爲:',mysql_error($this->_link); 103 die; 104 } 105 } 106 } 107 108 /** 109 * 得到所有記錄 110 * 111 * @param $sql string 查詢類的SQL(select,show,desc) 112 * 113 * @return array 二維數組,記錄的集合 114 */ 115 public function fetchAll($sql){ 116 //先執行 117 if(!$result = mysql_query($sql,$this->_link)){ 118 //執行失敗給出錯誤信息 119 echo '-_-!SQL執行失敗<br/>'; 120 echo '錯誤的SQL爲:',$sql,'<br/>'; 121 echo '錯誤代碼爲:',mysql_errno($this->_link),'<br/>'; 122 echo '錯誤信息爲:',mysql_error($this->_link); 123 die; 124 } 125 //獲取數據 126 $rows = array(); 127 while($row = mysql_fetch_assoc($result)){ 128 $rows[] = $row; 129 } 130 //釋放結果集 131 mysql_free_result($result); 132 //返回 133 return $rows; 134 } 135 136 /** 137 * 得到一條記錄 138 * 139 * @param $sql string 查詢類的SQL(select,show,desc) 140 * 141 * @return array 一維數組,一條記錄 142 */ 143 public function fetchRow($sql){ 144 //先執行 145 if(!$result = mysql_query($sql,$this->_link)){ 146 //執行失敗給出錯誤信息 147 echo '-_-!SQL執行失敗<br/>'; 148 echo '錯誤的SQL爲:',$sql,'<br/>'; 149 echo '錯誤代碼爲:',mysql_errno($this->_link),'<br/>'; 150 echo '錯誤信息爲:',mysql_error($this->_link); 151 die; 152 } 153 //獲取數據 154 $row = mysql_fetch_assoc($result); 155 //釋放結果集 156 mysql_free_result($result); 157 //返回 158 return $row; 159 } 160 161 /** 162 * 得到一個數據 163 * 164 * @param $sql string 查詢類的SQL(select,show,desc) 165 * 166 * @return string 惟一的數據 第一條記錄的第一列 167 */ 168 public function fetchColumn($sql){ 169 //先執行 170 if(!$result = mysql_query($sql,$this->_link)){ 171 //執行失敗給出錯誤信息 172 echo '-_-!SQL執行失敗<br/>'; 173 echo '錯誤的SQL爲:',$sql,'<br/>'; 174 echo '錯誤代碼爲:',mysql_errno($this->_link),'<br/>'; 175 echo '錯誤信息爲:',mysql_error($this->_link); 176 die; 177 } 178 //獲取數據 179 $row = mysql_fetch_row($result); 180 //釋放結果集 181 mysql_free_result($result); 182 //返回 183 return $row[0]; 184 } 185 186 187 /** 188 * 序列化時執行的方法 189 * @return array每一個數組元素爲一個須要被序列化的屬性名 190 * 191 */ 192 public function __sleep(){ 193 return array('_host','_post','_user','_pass','_charset','_dbname'); 194 } 195 196 /* 197 * 反序列化時被執行 198 * 從新初始化工做 199 */ 200 public function __wakeup(){ 201 //鏈接數據庫服務器 202 $this->_connect(); 203 //設定鏈接字符集 204 $this->_setCharset(); 205 //選擇默認數據庫 206 $this->_selectDB(); 207 } 208 }