1. 程式人生 > >Mysql資料庫實用工具類--含單例模組

Mysql資料庫實用工具類--含單例模組

繼前兩章的資料庫工具類不斷完善,現在加進去單例模式,程式碼都是在我這邊執行好的,可以直接拿去執行。

這些工具類都是特別基礎的,建議好好看看,對於初學者學習後面的pdo和封裝會有特別好的效果作用。

<?php
header('content-type:text/html;charset=utf-8');
error_reporting(E_ALL ^ E_DEPRECATED);
$config=array(
        'host'=>"localhost",
    'port'=>3306,
    'user'=>"root",
    'pass'=>'',
    'char'=>"utf8",
    'db'=>"test"
    );

class MYSQL{

  private  $link=null;
    private $host;
    private $port;
    private $user;
    private $pass;
    private $char;
    private $db;

// 新增單例模組
private static $instance=null;



    static function GetInstance($config){  // 獲取物件
        $obj=new self($config);
        if(!isset(self::$instance))
        {
            self::$instance=new self($config); //判斷如果instance為空則新建一個物件 然後存到靜態屬性instance裡面
        } return self::$instance;   //如果靜態屬性instance中已經有了物件則直接返回即可
    }
private function __clone(){

} // 私有化克隆方法,防止外界通過克隆手段來重新生成物件
// 單例模組結束

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->char=!empty($config['char']) ? $config['char'] : "utf8";
        $this->db=!empty($config['db']) ? $config['db'] : "test";
      
[email protected]
_connect("{$config['host']}:{$config['port']}","{$config['user']}","{$config['pass']}"); $this->charset($this->char); $this->usedb($this->db); } function charset($charset){ // 設定字元編碼 mysql_query("set names {$charset} "); } function usedb($db){ //更改要使用的資料庫 mysql_query("use {$db}"); echo "已切換資料庫 {$db} <br>"; } function closeDB(){ //關閉資料庫 mysql_close($this->link); echo "已關閉資料庫連線"; } function exec($sql){ // 返回增,刪,改語句的返回值為真假boolen $result=$this->query($sql); return true; //因為是增刪改語句,所以直接返回true就行了 } function getOneRow($sql){ //執行一條返回一行資料的語句,返回一維陣列 $result =$this->query($sql); // 一行代替幾行程式碼 $arr=mysql_fetch_assoc($result); mysql_free_result($result);// 提前釋放連線資源 釋放記憶體空間(銷燬結果集),否則等到頁面結束才自動銷燬 這是PHP語言的一個優勢 return $arr; } function getRows($sql){ // 執行一條返回多行資料的語句,返回二維陣列 $result=$this->query($sql); $array=array(); while ($arr=mysql_fetch_assoc($result)) { # code... $array[]=$arr; // 此時就為二維陣列了 } return $array; } function getOnedata($sql){ //執行一條返回一個數據的語句,返回一個直接值 $result=$this->query($sql);// 一行代替上面幾行 $arr=mysql_fetch_row($result); $data=$arr[0]; // 因為只取出一行,所以直接取出索引為0的陣列即可了 return $data; } function query($sql){ // 僅僅用於執行sql語句,然後直接返回sql執行的結果,然後給其他函式呼叫 $result=mysql_query($sql); if($result===false){ echo "資料執行失敗"; echo "請參考如下資訊:".mysql_error(); die(); }echo "資料執行成功"; return $result; } } ?>

這個類可以直接封裝為'mysql_tool.php'工具類然後引入到別的頁面檔案中使用,呼叫程式碼如下

<?php
require "./mysql_tool.php";
 // $obj=new MYSQL($config);  // sql語句換成 直接呼叫類

 $obj=MYSQL::GetInstance($config);  
// 因為建構函式被私有化了,所以只能通過類名呼叫靜態函式來例項化一個類


   $sql1="select name from stu ";
   $obj->getRows($sql1);
 var_dump($obj->getOneRow($sql1));
 echo "<br>";
   var_dump($obj->getRows($sql1));
   echo "<br>";
  var_dump($obj->getOnedata($sql1));
  echo "<br>";
    echo $obj->getOnedata($sql1);
?>