PHP數據庫操作類
阿新 • • 發佈:2017-11-10
ceo pre 行數 function php數據庫 魔術方法 new self lose 單例
<?php /* 設計一個類:mysql數據庫操作類 設計目標: 1,該類一實例化,就可以自動連接上mysql數據庫; 2,該類可以單獨去設定要使用的連接編碼(set names XXX) 3,該類可以單獨去設定要使用的數據庫(use XXX); 4,可以主動關閉連接; */ class MySQLDB{ private $link = null; //用於存儲連接成功後的“資源” //定義一些屬性,以存儲連接數據庫的6項基本信息 private $host; private $port; private $user; private $pass; private $charset; private $dbname; //實現單例第2步:用於存儲唯一的單例對象: private static $instance = null; //實現單例第3步: static function GetInstance($config){ //if( !isset( self::$instance )){ //還沒有該對象 if( !(self::$instance instanceof self) ){ //這一行代替上一行的判斷,更常見 self::$instance = new self($config); //就創建並存起來 } return self::$instance; } //實現單例第4步:私有化這個克隆的魔術方法 private function __clone(){} //實現單例第1步: private function __construct($config){ //先將這些基本的連接信息,保存起來! $this->host = !empty($config[‘host‘]) ? $config[‘host‘] : "localhost"; //考慮空值情況,使用默認值代替 $this->port = !empty($config[‘port‘]) ? $config[‘port‘] : "3306" ; $this->user = !empty($config[‘user‘]) ? $config[‘user‘] : "root" ; $this->pass = !empty($config[‘pass‘]) ? $config[‘pass‘] : "" ; $this->charset = !empty($config[‘charset‘]) ? $config[‘charset‘] : "utf8" ; $this->dbname = !empty($config[‘dbname‘]) ? $config[‘dbname‘] : "php39" ; //然後連接數據庫! $this->link = mysql_connect("{$this->host}:{$this->port}", "{$this->user}", "{$this->pass}") or die("連接失敗"); //設定編碼 //mysql_query("set names {$config[‘charset‘]}"); $this->setCharset( $this->charset );//這一行代替上一行 //選定要使用的數據庫名 //mysql_query("use {$config[‘dbname‘]}"); $this->selectDB( $this->dbname );//這一行代替上一行 } //可以設定要使用的連接編碼 function setCharset( $charset ){ mysql_query("set names $charset", $this->link); } //可以設定要使用的數據庫 function selectDB($dbname){ mysql_query("use $dbname", $this->link); } //可關閉連接 function closeDB(){ mysql_close($this->link); } //這個方法為了執行一條增刪改語句,它可以返回真假結果 function exec($sql){ $result = $this->query($sql); return true; //因為是增刪改語句,直接返回true就可以 } //這個方法為了執行一條返回一行數據的語句,它可以返回一維數組 //數組的下標,就是sql語句中的取出的字段名; function GetOneRow($sql){ $result = $this->query($sql); //這裏開始處理數據,以返回數組。此時$result是一個結果集(單行數據) $rec = mysql_fetch_assoc( $result );//取出第一行數據(其實應該只有這一行) mysql_free_result( $result ); //提前釋放資源(銷毀結果集),否則需要等到頁面結束才自動銷毀 return $rec; } //這個方法為了執行一條返回多行數據的語句,它可以返回二維數組 function GetRows($sql){ $result = $this->query($sql); //這裏開始處理數據,以返回數組。此時$result是一個結果集(且是多行數據) $arr = array(); //空數組,用於存放要返回的結果數組(二維) while ( $rec = mysql_fetch_assoc( $result ) ){ $arr[] = $rec; //此時,$arr就是二維數組了! } mysql_free_result( $result ); //提前釋放資源(銷毀結果集),否則需要等到頁面結束才自動銷毀 return $arr; } //這個方法為了執行一條返回一個數據的語句,它可以返回一個直接值 //這條語句類似這樣:select count(*) as c from user_list function GetOneData($sql){ $result = $this->query($sql); //這裏開始處理數據,以返回一個數據(標量數據)! $rec = mysql_fetch_row( $result ); //這裏也可以使用fetch_array這個函數! //這裏得到$rec仍然是一個數組,但其類似這樣: // array ( 0=> 5 );或者 array( 0=>‘user1‘); $data = $rec[0]; mysql_free_result( $result ); //提前釋放資源(銷毀結果集),否則需要等到頁面結束才自動銷毀 return $data; } //這個方法用於執行任何sql語句,並進行錯誤處理,或返回執行結果; private function query( $sql ){ $result = mysql_query($sql, $this->link); if( $result === false){ //對任何sql語句,執行失敗,都需要處理這種失敗情況: echo "<p>sql語句執行失敗,請參考如下信息:"; echo "<br />錯誤代號:" . mysql_errno(); //獲取錯誤代號 echo "<br />錯誤信息:" . mysql_error(); //獲取錯誤提示內部 echo "<br />錯誤語句:" . $sql; die(); } return $result; //返回的是“執行的結果” } } ?>
PHP數據庫操作類