自己编写的数据库工具类

/**
 * 数据库工具类
 * 1.连接数据库
 * 2.执行增删改查功能功能并报错
 * 3.没有参数传递是则使用默认信息连接
 */

class mysql {
    private $link = null;       //记录连接资源
    private $host;
    private $port;
    private $user;
    private $pass;
    private $charset;
    private $dbname;            //设定6个私有属性,以存储连接属性

    //单例化1,设定私有静态属性,存储该单例化对象
    private static $instance = null;
    //单例化2,将构造方法私有化
    private function __construct($conf){
        //保留属性,并设定默认值
        $this->host=$conf['host'] ?$conf['host']:"localhost";
        $this->port=$conf['port']?$conf['port']:"3306";
        $this->user=$conf['user'] ?$conf['user']:"root";
        $this->pass=$conf['pass'] ?$conf['pass']:"zhangHD";
        $this->charset=$conf['charset'] ?$conf['charset']:"utf8";
        $this->dbname=$conf['dbname'] ?$conf['dbname']:"mvc";
        $this->connect();
    }
    //单例化3,设定静态方法并判断是否需要new对象,并返回
    static function getdb($conf){
        if(empty(self::$instance)){
            self::$instance = new self($conf);
        }
        return self::$instance;
    }

    //更改数据库
    function select_database($db){
        $this->query("use $db");
        $this->dbname=$db;
    }

    //更改连接的字符集
    function select_charset($charset){
        $this->query("set names $charset");
        $this->charset = $charset;
    }

    //关闭连接
    function close(){
        mysql_close($this->link);
    }

    //该方法专门处理SQL语句,执行成功则返回,失败则结束
    private  function query($sql){
        $result = mysql_query($sql,$this->link);
        if($result === false){
            echo "<p>发生错误了,请参考:";
            echo "<br>错误语句:".$sql;
            echo "<br>错误提示:".mysql_error();
            echo "<br>错误代号:".mysql_errno();
            die();              //失败即终止程序
        }else {
            return $result;
        }
    }

    //该方法用于执行一条没有返回结果的增删改查语句
    function exec ($sql){
        $result = $this->query($sql);
        return true;
    }

    //该方法可以执行一条返回多行数据的select语句,并将数据以“二维数组”的形式返回
    function getrows($sql){
         $result = $this->query($sql);
         //返回二维数组。此时$result是“结果集”
         while($res = mysql_fetch_assoc($result)){
            $arr[]=$res;
         }
         return $arr;      
    }

    //返回一行多列数据
    function getonerow($sql){
         $result = $this->query($sql);
             //返回一组数据。此时$result是“结果集”
             if($rec = mysql_fetch_assoc($result)){
                 return $rec;
             }
             return array();
    }

    //返回一行多列数据
    function getonedate($sql){
        $result = $this->query($sql);
        //返回一组数据。此时$result是“结果集”
        if($rec = mysql_fetch_row($result)){
            return $rec[0];//如果没有数据,则返回该行
         }
         return false;//表示没有数据
    }

    //将连接资源保存到本地硬盘中
    function __sleep(){
        return array('host','port','user','pass','charset','dbname');
    }

    //调取本地存储的连接资源再次连接数据库系统
    function __wakeup(){
        $this->connect();
    }

    //连接数据库并将连接资源存储起来
    private  function connect(){
        $this->link = @mysql_connect("{$this->host}:{$this->port}","{$this->user}","{$this->pass}") or die ('数据库服务器连接失败!!!');
        $this->select_charset($this->charset);
        $this->select_database($this->dbname);
    }
}

posted @ 2017-05-02 21:50  zhanghd  阅读(856)  评论(0编辑  收藏  举报