封装自己DB

Posted brady-wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了封装自己DB相关的知识,希望对你有一定的参考价值。

DB.class.php 

<?php
/**
 * Created by PhpStorm.
 * User: brady.wang
 * Date: 2017/11/10
 * Time: 18:00
 */

    //封装一个DB类,用来专门操作数据库,以后凡是对数据库的操作,都由DB类的对象来实现
    class DB{
        //属性
        private $host;
        private $port;
        private $user;
        private $pass;
        private $dbname;
        private $charset;
        private $prefix;            //表前缀
        private $link;                //连接资源(连接数据库,一般会返回一个资源,所以需要定义一个link属性)

        //构造方法(作用:为了初始化对象的属性),会被自动调用
        /*
         * @param1 array $arr,默认为空,里面是一个关联数组,里面有7个元素
         * array(‘host‘ => ‘localhost‘,‘port‘ => ‘3306‘);
         */
        public function __construct($arr = array()){
            //初始化
            $this->host = isset($arr[‘host‘]) ? $arr[‘host‘] : ‘localhost‘;//先判断是否有自己的host,如果有就用自己的host,否则就使用默认的localhost
            $this->port = isset($arr[‘port‘]) ? $arr[‘port‘] : ‘3306‘;
            $this->user = isset($arr[‘user‘]) ? $arr[‘user‘] : ‘root‘;
            $this->pass = isset($arr[‘pass‘]) ? $arr[‘pass‘] : ‘root‘;
            $this->dbname = isset($arr[‘dbname‘]) ? $arr[‘dbname‘] : ‘test‘;
            $this->charset = isset($arr[‘charset‘]) ? $arr[‘charset‘] : ‘utf8‘;
            $this->prefix = isset($arr[‘prefix‘]) ? $arr[‘prefix‘] : ‘‘;

            //连接数据库(类是要操作数据库,因此要连接数据库)
            $this->connect();

            //设置字符集
            $this->setCharset();

            //选择数据库
            $this->setDbname();
        }

        /*
         * 连接数据库
        */
        private function connect(){
            //mysql扩展连接
            $this->link = mysql_connect($this->host . ‘:‘ . $this->port,$this->user,$this->pass);

            //判断结果
            if(!$this->link){
                //结果出错了
                //暴力处理,如果是真实线上项目(生产环境)必须写入到日志文件
                echo ‘数据库连接错误:<br/>‘;
                echo ‘错误编号‘ . mysql_errno() . ‘<br/>‘;
                echo ‘错误内容‘ . mysql_error() . ‘<br/>‘;
                exit;
            }
        }

        /*
         * 设置字符集
        */
        private function setCharset(){
            //设置
            $this->db_query("set names {$this->charset}");
        }

        /*
         * 选择数据库
        */
        private function setDbname(){
            $this->db_query("use {$this->dbname}");
        }

        /*
         * 增加数据
         * @param1 string $sql,要执行的插入语句
         * @return boolean,成功返回是自动增长的ID,失败返回FALSE
        */
        public function insert($sql){
            //发送数据
            $this->db_query($sql);

            //成功返回自增ID
            return mysql_affected_rows() ? mysql_insert_id() : FALSE;
        }

        /*
         * 删除数据
         * @param1 string $sql,要执行的删除语句
         * @return Boolean,成功返回受影响的行数,失败返回FALSE
        */
        public function delete($sql){
            //发送SQL
            $this->db_query($sql);

            //判断结果
            return mysql_affected_rows() ? mysql_affected_rows() : FALSE;
        }

        /*
         * 更新数据
         * @param1 string $sql,要执行的更新语句
         * @return Boolean,成功返回受影响的行数,失败返回FALSE
        */
        public function update($sql){
            //发送SQL
            $this->db_query($sql);

            //判断结果
            return mysql_affected_rows() ? mysql_affected_rows() : FALSE;
        }

        /*
         * 查询:查询一条记录
         * @param1 string $sql,要查询的SQL语句
         * @return mixed,成功返回一个数组,失败返回FALSE
        */
        public function get_row($sql){
            //发送SQL
            $res = $this->db_query($sql);

            //判断返回
            return mysql_num_rows($res) ? mysql_fetch_assoc($res) : FALSE;
        }

        /*
         * 查询:查询多条记录
         * @param1 string $sql,要查询的SQL语句
         * @return mixed,成功返回一个二维数组,失败返回FALSE
        */
        public function get_all($sql){
            //发送SQL
            $res = $this->db_query($sql);

            //判断返回
            if(mysql_num_rows($res)){
                //循环遍历
                $list = array();

                //遍历
                while($row = mysql_fetch_assoc($res)){
                    $list[] = $row;
                }

                //返回
                return $list;
            }

            //返回FALSE
            return FALSE;
        }

        /*
         * mysql_query错误处理
         * @param1 string $sql,需要执行的SQL语句
         * @return mixed,只要语句不出错,全部返回
        */
        private function db_query($sql){
            //发送SQL
            $res = mysql_query($sql);

            //判断结果
            if(!$res){
                //结果出错了
                //暴力处理,如果是真实线上项目(生产环境)必须写入到日志文件
                echo ‘语句出现错误:<br/>‘;
                echo ‘错误编号‘ . mysql_errno() . ‘<br/>‘;
                echo ‘错误内容‘ . mysql_error() . ‘<br/>‘;
                exit;
            }
            //没有错误
            return $res;
        }
        //__sleep方法
        public function __sleep(){
            //返回需要保存的属性的数组
            return array(‘host‘,‘port‘,‘user‘,‘pass‘,‘dbname‘,‘charset‘,‘prefix‘);
        }

        //__wakeup方法
        public function __wakeup(){
            //连接资源
            $this->connect();
            //设置字符集和选中数据库
            $this->setCharset();
            $this->setDbname();
        }

        /*
         * 获取完整的表名
        */
        protected function get_table_name(){
            //完整表名:前缀+表名
            return $this->prefix . $this->table;
        }
    }
//这个DB类,一般不写析构(不释放资源)

  test.php

<?php
/**
 * Created by PhpStorm.
 * User: brady.wang
 * Date: 2017/11/10
 * Time: 18:04
 */


//使用DB类的对象来访问数据库
//先加载类文件
//include_once ‘DB.class.php‘;
//如果想使用其他类,又需要加载(所以使用魔术函数__autoload来实现类的自动加载)
//显示的写出魔术函数__autoload
//参数:需要加载的类的名字
function __autoload($a){
    //将对应的类文件加载进来
    if(is_file("$a.class.php")){
        include_once "$a.class.php";
    }
}
//实例化
$db = new DB(array(‘host‘ => ‘192.168.33.30‘));

$sql = "select * from user where id = 1";
$res = $db->get_row($sql);
function dump($arr)
{
    echo "<pre>";
    print_r($arr);
    echo "</pre>";
}
dump($res);

  

以上是关于封装自己DB的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

php自己封装一个Db类,跟tp5封装的类一模一样

学习到目前,自己封装的db类和pdo类

Java 封装