文章出處

設計目標:
  1,該類一實例化,就可以自動連接上mysql數據庫;
  2,該類可以單獨去設定要使用的連接編碼(set names XXX)
  3,該類可以單獨去設定要使用的數據庫(use XXX);
  4,可以主動關閉連接;

<?php
/*
設計一個類:mysql數據庫操作類
設計目標:
1,該類一實例化,就可以自動連接上mysql數據庫;
2,該類可以單獨去設定要使用的連接編碼(set  names  XXX)
3,該類可以單獨去設定要使用的數據庫(use  XXX);
4,可以主動關閉連接;
*/
class MySqlDB{
    // 鏈接資源
    private $link = null;
    
    // 構造方法
    function __construct($host='localhost', $port=3306, $user='root', $pwd='', $charset='utf8', $dbName='mysql'){
        $this->link = @mysql_connect("$host:$port", $user, $pwd); // @:阻止警告輸出
        mysql_query("set names $charset"); // 設置編碼
        mysql_query("use $dbName"); // 設置使用的數據庫
    }

    // 可設置鏈接編碼
    function setCharset($charset){
        mysql_query("set names $charset");
    }

    // 可設置使用的數據庫
    function selectDB($dbName){
        mysql_query("use $dbName");
    }

    // 可關閉鏈接
    function closeDB(){
        mysql_close($this->link);
    }
}


# ************************* 測試 *************************
$host = 'localhost';
$port = 3306;
$user = 'root';
$pwd = '123456';
$charset = 'utf8';
$dbname = 'db1';

$db = new MySqlDB($host, $port, $user, $pwd, $charset, $dbname);

// 測試是否鏈接成功
$set = mysql_query("select * from student");
var_dump($set);
echo "<br>";

// 測試修改編碼
$db->setCharset('gbk');


//**********  顯示數據 **********
echo "<table border='1'>";
echo "<tr>";
// 獲得列數
$field_count = mysql_num_fields($set);
for($i=0; $i<$field_count; $i++){
    // 獲得第 i 列的名稱
    $field_name = mysql_field_name($set, $i);
    echo "<td>". $field_name . "</td>";
}
echo "</tr>";
// 遍歷每一行記錄
while($rec = mysql_fetch_array($set)){
    echo "<tr>";

    for($i=0; $i<$field_count; $i++){
        // 獲取列名
        $field_name = mysql_field_name($set, $i);
        // 獲取該記錄,改行的數據
        echo "<td>" . $rec[$field_name] . "</td>";
    }

    echo "</tr>";
}

echo "</table>";

// ********* end **********


// 測試關閉鏈接
$db->closeDB();
$set = @mysql_query("select * from student");
var_dump($set);
echo "<br>";

?>
View Code

 

改進: 使用單例

<?php
/*
設計一個類:mysql數據庫操作類
設計目標:
1,該類一實例化,就可以自動連接上mysql數據庫;
2,該類可以單獨去設定要使用的連接編碼(set  names  XXX)
3,該類可以單獨去設定要使用的數據庫(use  XXX);
4,可以主動關閉連接;
*/

class MySQLDB{
    private $link = null; // 用于存儲成功鏈接后的資源

    // 屬性, 存儲鏈接數據庫的基本信息
    private $host;
    private $port;
    private $user;
    private $pwd;
    private $charset;
    private $dbname;

    // 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->pwd = !empty($config['pwd']) ? $config['pwd'] : "";
        $this->charset = !empty($config['charset']) ? $config['charset'] : "utf8";
        $this->dbname = !empty($config['dbname']) ? $config['dbname'] : "mysql";
        
        // 鏈接數據庫
        $this->link = mysql_connect("{$this->host}:{$this->port}", "$this->user", "$this->pwd")
            or die("鏈接失敗");

        // 設定編碼
        //mysql_query("set names {$config['charset']}");
        $this->setCharset($config['charset']);

        // 設定要使用的數據庫名
        //mysql_query("use {$config['dbname']}");
        $this->selectDB($config['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(){}

    // 可設定要使用的編碼
    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);
    }

    // 執行 sql 語句,進行錯誤處理,并返回結果
    private function query($sql){
        $result = mysql_query($sql, $this->link);
        if($result === false){
            // 失敗處理
            echo "sql語句執行失敗,請參考如下信息:";
            echo "<br />錯誤代碼: " . mysql_errno();
            echo "<br />錯誤信息: " . mysql_error();
            echo "<br />錯誤語句: " . $sql;
            die(); 
        }
        return $result;
    }

    // 執行一條 增刪改 sql語句,返回真或假
    function exec($sql){
        $result = $this->query($sql);
        return true;
    }
    
    // 執行一條 sql 語句,返回一行記錄
    function getOneRow($sql){
        $result = $this->query($sql);
        $rec = mysql_fetch_assoc($result);
        // 提前銷毀結果集,否則需要等待頁面結束才能自動銷毀
        mysql_free_result($result);
        return $rec;
    }

    // 執行一條 sql 語句,返回多行記錄
    function getRows($sql){
        $result = $this->query($sql);
        $arr = array();
        while($rec = mysql_fetch_assoc($result)){
            $arr[] = $rec; // 二維數組
        }

        mysql_free_result($result);
        return $arr;
    }

    // 執行一條 sql 語句,直接返回一個結果
    // 類似于: select  count(*) as c  from  user_list
    function getOneData($sql){
        $result = $this->query($sql);
        $rec = mysql_fetch_row($result);
        $data = $rec[0];
        mysql_free_result($result);
        return $data;
    }
}
?>
View Code

 

-------------->>>


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()