zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    MQCONN failed (Reason = 2277)
    MQ打开队列模式 input和input_exclusive
    mq 消息最大长度 最大是100M
    Easyui Datagrid的Rownumber行号显示问题
    ajax请求时session已过期处理方案
    seafile Windows Memcached
    seafile 接口频度控制
    你的旧船票能否搭上这艘巨轮?——解读近5年大数据产业发展规划
    第一章 输入/输出知识
    It looks like you don't have a C compiler and make utility installed. 错误
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/6027997.html
Copyright © 2011-2022 走看看