php : mysql数据库操作类演示

设计目标:
  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

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

原文地址:https://www.cnblogs.com/KeenLeung/p/6027997.html