封裝自己DB
阿新 • • 發佈:2017-11-10
自動 更新 遍歷 time 函數 日誌文件 mys 選中 tchar
DB.class.php
<?php /** * Created by PhpStorm. * User: brady.wang * Date: 2017/11/10 * Time: 18:00 */ //封裝一個DB類,用來專門操作數據庫,以後凡是對數據庫的操作,都由DB類的對象來實現 class DB{ //屬性 private $host; private $port; private $user; private $pass; private $dbname; private $charset; private $prefix; //表前綴 private $link; //連接資源(連接數據庫,一般會返回一個資源,所以需要定義一個link屬性) //構造方法(作用:為了初始化對象的屬性),會被自動調用 /* * @param1 array $arr,默認為空,裏面是一個關聯數組,裏面有7個元素 * array(‘host‘ => ‘localhost‘,‘port‘ => ‘3306‘); */ public function __construct($arr = array()){ //初始化 $this->host = isset($arr[‘host‘]) ? $arr[‘host‘] : ‘localhost‘;//先判斷是否有自己的host,如果有就用自己的host,否則就使用默認的localhost $this->port = isset($arr[‘port‘]) ? $arr[‘port‘] : ‘3306‘; $this->user = isset($arr[‘user‘]) ? $arr[‘user‘] : ‘root‘; $this->pass = isset($arr[‘pass‘]) ? $arr[‘pass‘] : ‘root‘; $this->dbname = isset($arr[‘dbname‘]) ? $arr[‘dbname‘] : ‘test‘; $this->charset = isset($arr[‘charset‘]) ? $arr[‘charset‘] : ‘utf8‘; $this->prefix = isset($arr[‘prefix‘]) ? $arr[‘prefix‘] : ‘‘; //連接數據庫(類是要操作數據庫,因此要連接數據庫) $this->connect(); //設置字符集 $this->setCharset(); //選擇數據庫 $this->setDbname(); } /* * 連接數據庫 */ private function connect(){ //mysql擴展連接 $this->link = mysql_connect($this->host . ‘:‘ . $this->port,$this->user,$this->pass); //判斷結果 if(!$this->link){ //結果出錯了 //暴力處理,如果是真實線上項目(生產環境)必須寫入到日誌文件 echo ‘數據庫連接錯誤:<br/>‘; echo ‘錯誤編號‘ . mysql_errno() . ‘<br/>‘; echo ‘錯誤內容‘ . mysql_error() . ‘<br/>‘; exit; } } /* * 設置字符集 */ private function setCharset(){ //設置 $this->db_query("set names {$this->charset}"); } /* * 選擇數據庫 */ private function setDbname(){ $this->db_query("use {$this->dbname}"); } /* * 增加數據 * @param1 string $sql,要執行的插入語句 * @return boolean,成功返回是自動增長的ID,失敗返回FALSE */ public function insert($sql){ //發送數據 $this->db_query($sql); //成功返回自增ID return mysql_affected_rows() ? mysql_insert_id() : FALSE; } /* * 刪除數據 * @param1 string $sql,要執行的刪除語句 * @return Boolean,成功返回受影響的行數,失敗返回FALSE */ public function delete($sql){ //發送SQL $this->db_query($sql); //判斷結果 return mysql_affected_rows() ? mysql_affected_rows() : FALSE; } /* * 更新數據 * @param1 string $sql,要執行的更新語句 * @return Boolean,成功返回受影響的行數,失敗返回FALSE */ public function update($sql){ //發送SQL $this->db_query($sql); //判斷結果 return mysql_affected_rows() ? mysql_affected_rows() : FALSE; } /* * 查詢:查詢一條記錄 * @param1 string $sql,要查詢的SQL語句 * @return mixed,成功返回一個數組,失敗返回FALSE */ public function get_row($sql){ //發送SQL $res = $this->db_query($sql); //判斷返回 return mysql_num_rows($res) ? mysql_fetch_assoc($res) : FALSE; } /* * 查詢:查詢多條記錄 * @param1 string $sql,要查詢的SQL語句 * @return mixed,成功返回一個二維數組,失敗返回FALSE */ public function get_all($sql){ //發送SQL $res = $this->db_query($sql); //判斷返回 if(mysql_num_rows($res)){ //循環遍歷 $list = array(); //遍歷 while($row = mysql_fetch_assoc($res)){ $list[] = $row; } //返回 return $list; } //返回FALSE return FALSE; } /* * mysql_query錯誤處理 * @param1 string $sql,需要執行的SQL語句 * @return mixed,只要語句不出錯,全部返回 */ private function db_query($sql){ //發送SQL $res = mysql_query($sql); //判斷結果 if(!$res){ //結果出錯了 //暴力處理,如果是真實線上項目(生產環境)必須寫入到日誌文件 echo ‘語句出現錯誤:<br/>‘; echo ‘錯誤編號‘ . mysql_errno() . ‘<br/>‘; echo ‘錯誤內容‘ . mysql_error() . ‘<br/>‘; exit; } //沒有錯誤 return $res; } //__sleep方法 public function __sleep(){ //返回需要保存的屬性的數組 return array(‘host‘,‘port‘,‘user‘,‘pass‘,‘dbname‘,‘charset‘,‘prefix‘); } //__wakeup方法 public function __wakeup(){ //連接資源 $this->connect(); //設置字符集和選中數據庫 $this->setCharset(); $this->setDbname(); } /* * 獲取完整的表名 */ protected function get_table_name(){ //完整表名:前綴+表名 return $this->prefix . $this->table; } } //這個DB類,一般不寫析構(不釋放資源)
test.php
<?php /** * Created by PhpStorm. * User: brady.wang * Date: 2017/11/10 * Time: 18:04 */ //使用DB類的對象來訪問數據庫 //先加載類文件 //include_once ‘DB.class.php‘; //如果想使用其他類,又需要加載(所以使用魔術函數__autoload來實現類的自動加載) //顯示的寫出魔術函數__autoload //參數:需要加載的類的名字 function __autoload($a){ //將對應的類文件加載進來 if(is_file("$a.class.php")){ include_once "$a.class.php"; } } //實例化 $db = new DB(array(‘host‘ => ‘192.168.33.30‘)); $sql = "select * from user where id = 1"; $res = $db->get_row($sql); function dump($arr) { echo "<pre>"; print_r($arr); echo "</pre>"; } dump($res);
封裝自己DB