zoukankan      html  css  js  c++  java
  • php封装数据库函数

    从Thinkphp里面抽离出来的数据库模块,感觉挺好用

    common.php

    <?PHP
    
    /**
     * 通用函数
     */
    //包含配置文件 
    if (is_file("config.php")) {
        C(include 'config.php');
    }
    
    if (!function_exists("__autoload")) {
    
        function __autoload($class_name) {
            require_once('classes/' . $class_name . '.class.php');
        }
    
    }
    
    /**
     * 数据库操作函数
     * @return mysqli
     */
    function M() {
        $db = new Model();
        if (mysqli_connect_errno())
            throw_exception(mysqli_connect_error());
        return $db;
    }
    
    // 获取配置值
    function C($name = null, $value = null) {
        //静态全局变量,后面的使用取值都是在 $)config数组取
        static $_config = array();
        // 无参数时获取所有
        if (empty($name))
            return $_config;
        // 优先执行设置获取或赋值
        if (is_string($name)) {
            if (!strpos($name, '.')) {
                $name = strtolower($name);
                if (is_null($value))
                    return isset($_config[$name]) ? $_config[$name] : null;
                $_config[$name] = $value;
                return;
            }
            // 二维数组设置和获取支持
            $name = explode('.', $name);
            $name[0] = strtolower($name[0]);
            if (is_null($value))
                return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null;
            $_config[$name[0]][$name[1]] = $value;
            return;
        }
        // 批量设置
        if (is_array($name)) {
            return $_config = array_merge($_config, array_change_key_case($name));
        }
        return null; // 避免非法参数
    }
    
    function ajaxReturn($data = null, $message = "", $status) {
        $ret = array();
        $ret["data"] = $data;
        $ret["message"] = $message;
        $ret["status"] = $status;
        echo json_encode($ret);
        die();
    }
    
    
    //调试数组
    function _dump($var) {
        if (C("debug"))
            dump($var);
    }
    
    // 浏览器友好的变量输出
    function dump($var, $echo = true, $label = null, $strict = true) {
        $label = ($label === null) ? '' : rtrim($label) . ' ';
        if (!$strict) {
            if (ini_get('html_errors')) {
                $output = print_r($var, true);
                $output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
            } else {
                $output = $label . print_r($var, true);
            }
        } else {
            ob_start();
            var_dump($var);
            $output = ob_get_clean();
            if (!extension_loaded('xdebug')) {
                $output = preg_replace("/]=>
    (s+)/m", '] => ', $output);
                $output = '<pre>' . $label . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
            }
        }
        if ($echo) {
            echo($output);
            return null;
        }
        else
            return $output;
    }
    
    /**
     * 调试输出
     * @param type $msg
     */
    function _debug($msg) {
        if (C("debug"))
            echo "$msg<br />";
    }
    
    function _log($filename, $msg) {
        $time = date("Y-m-d H:i:s");
        $msg = "[$time]
    $msg
    ";
        if (C("log")) {
            $fd = fopen($filename, "a+");
            fwrite($fd, $msg);
            fclose($fd);
        }
    }
    
    /**
     * 日志记录
     * @param type $str
     */
    function L($msg) {
        $time = date("Y-m-d H:i:s");
        $clientIP = $_SERVER['REMOTE_ADDR'];
        $msg = "[$time $clientIP] $msg
    ";
        $log_file = C("LOGFILE");
        _log($log_file, $msg);
    }
    
    ?>

    config.php

    <?php
    
    /**
     * 数据库配置文件
     */
    $db = array(
        'DB_TYPE' => 'mysql',
        'DB_HOST' => '127.0.0.1',
        'DB_NAME' => 'DB',
        'DB_USER' => 'USER',
        'DB_PWD' => 'PWD',
        'DB_PORT' => '3306',
        
    );
    return $db;
    ?>

    数据库模型类Model.class.php,放到classes/目录下

    <?php
    
    /**
     * 数据库模型类
     */
    class Model {
    
        // 数据库连接ID 支持多个连接
        protected $linkID = array();
        // 当前数据库操作对象
        protected $db = null;
        // 当前查询ID
        protected $queryID = null;
        // 当前SQL指令
        protected $queryStr = '';
        // 是否已经连接数据库
        protected $connected = false;
        // 返回或者影响记录数
        protected $numRows = 0;
        // 返回字段数
        protected $numCols = 0;
        // 最近错误信息
        protected $error = '';
    
        public function __construct() {
            $this->db = $this->connect();
        }
    
        /**
         * 连接数据库方法
         */
        public function connect($config = '', $linkNum = 0) {
            if (!isset($this->linkID[$linkNum])) {
                if (empty($config))
                    $config = array(
                        'username' => C('DB_USER'),
                        'password' => C('DB_PWD'),
                        'hostname' => C('DB_HOST'),
                        'hostport' => C('DB_PORT'),
                        'database' => C('DB_NAME')
                    );
                $this->linkID[$linkNum] = new mysqli($config['hostname'], $config['username'], $config['password'], $config['database'], $config['hostport'] ? intval($config['hostport']) : 3306);
                if (mysqli_connect_errno())
                    throw_exception(mysqli_connect_error());
                $this->connected = true;
            }
            return $this->linkID[$linkNum];
        }
    
        /**
         * 初始化数据库连接
         */
        protected function initConnect() {
            if (!$this->connected) {
                $this->db = $this->connect();
            }
        }
    
        /**
         * 获得所有的查询数据
         * @access private
         * @param string $sql  sql语句
         * @return array
         */
        public function select($sql) {
            $this->initConnect();
            if (!$this->db)
                return false;
            $query = $this->db->query($sql);
            $list = array();
            if (!$query)
                return $list;
            while ($rows = $query->fetch_assoc()) {
                $list[] = $rows;
            }
            return $list;
        }
    
        /**
         * 只查询一条数据
         */
        public function find($sql) {
            $resultSet = $this->select($sql);
            if (false === $resultSet) {
                return false;
            }
            if (empty($resultSet)) {// 查询结果为空
                return null;
            }
            $data = $resultSet[0];
            return $data;
        }
    
        /**
         * 获取一条记录的某个字段值 , sql 由自己组织
         * 例子: $model->getField("select id from user limit 1")
         */
        public function getField($sql) {
            $resultSet = $this->select($sql);
            if (!empty($resultSet)) {
                return reset($resultSet[0]);
            }
        }
    
        /**
         * 执行查询 返回数据集
         */
        public function query($str) {
            $this->initConnect();
            if (!$this->db) {
                if (C("debug"))
                    echo "connect to database error";
                return false;
            }
            $this->queryStr = $str;
            //释放前次的查询结果
            if ($this->queryID)
                $this->free();
            $this->queryID = $this->db->query($str);
            // 对存储过程改进
            if ($this->db->more_results()) {
                while (($res = $this->db->next_result()) != NULL) {
                    $res->free_result();
                }
            }
            //$this->debug();
            if (false === $this->queryID) {
                echo $this->error();
                return false;
            } else {
                $this->numRows = $this->queryID->num_rows;
                $this->numCols = $this->queryID->field_count;
                return $this->getAll();
            }
        }
    
        /**
         * 执行语句 , 例如插入,更新操作
         * @access public
         * @param string $str  sql指令
         * @return integer
         */
        public function execute($str) {
            $this->initConnect();
            if (!$this->db)
                return false;
            $this->queryStr = $str;
            //释放前次的查询结果
            if ($this->queryID)
                $this->free();
            $result = $this->db->query($str);
            if (false === $result) {
                $this->error();
                return false;
            } else {
                $this->numRows = $this->db->affected_rows;
                $this->lastInsID = $this->db->insert_id;
                return $this->numRows;
            }
        }
    
        /**
         * 获得所有的查询数据
         * @access private
         * @param string $sql  sql语句
         * @return array
         */
        private function getAll() {
            //返回数据集
            $result = array();
            if ($this->numRows > 0) {
                //返回数据集
                for ($i = 0; $i < $this->numRows; $i++) {
                    $result[$i] = $this->queryID->fetch_assoc();
                }
                $this->queryID->data_seek(0);
            }
            return $result;
        }
    
        /**
         * 返回最后插入的ID
         */
        public function getLastInsID() {
            return $this->db->insert_id;
        }
    
        // 返回最后执行的sql语句
        public function _sql() {
            return $this->queryStr;
        }
    
        /**
         * 数据库错误信息
         */
        public function error() {
            $this->error = $this->db->errno . ':' . $this->db->error;
            if ('' != $this->queryStr) {
                $this->error .= "
     [ SQL语句 ] : " . $this->queryStr;
            }
            //trace($this->error, '', 'ERR');
            return $this->error;
        }
    
        /**
         * 释放查询结果
         */
        public function free() {
            $this->queryID->free_result();
            $this->queryID = null;
        }
    
        /**
         * 关闭数据库
         */
        public function close() {
            if ($this->db) {
                $this->db->close();
            }
            $this->db = null;
        }
    
        /**
         * 析构方法
         */
        public function __destruct() {
            if ($this->queryID) {
                $this->free();
            }
            // 关闭连接
            $this->close();
        }
    
    }

    例子:

    #include "common.php"

    function
    test(){ $model = M(); $sql = "select * from test"; $list = $model->query($sql); _dump($list); }
  • 相关阅读:
    安装node-gyp
    node版本切换
    electron-vue运行只出现项目目录不出现效果
    高级运维工程师的必备技术
    linux 下的shutdown指令
    数据库实体联系模型与关系模型
    数据库表设计1
    实体-关系模型
    Excel中怎么快速选中区域
    EXCEL中给包含某个字段的单元格所在行标注颜色
  • 原文地址:https://www.cnblogs.com/trying/p/3572979.html
Copyright © 2011-2022 走看看