欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

sqlserver2008及以上数据库操作封装类

程序员文章站 2024-01-26 16:56:10
...

需要php_serv.dll支持,需要到微软官网下载 支持sqlserver2008(包括)以上版本 sqlserver2005以下就不需要尝试了,分页函数用法不支持的. 类比较简单,就不做演示了 http://www.du52.com/text.php?id=582 无 ?php/** * 数据库管理 * * @author wangaibo168@163.co

需要php_serv.dll支持,需要到微软官网下载
支持sqlserver2008(包括)以上版本
sqlserver2005以下就不需要尝试了,分页函数用法不支持的.
类比较简单,就不做演示了
http://www.du52.com/text.php?id=582
65535) return false;
        $username = self::get('username');
        if(empty($username)) return false;
        $database = self::get('database');
        if(empty($database)) return false;
        $charset = self::get('charset');
        if(empty($charset)) return false;
        return true;
    }

    /**
     * 连接初始化
     * @param bool $reconnect
     */
    public static function connect($reconnect=false){
        if(!$reconnect && is_resource(self::$DbLink)) return;
        self::close();
        if(!self::check()) die('Database Configuration Error');
        $opt = array('Database'=>self::get('database'),'CharacterSet'=>self::get('charset'),'UID'=>self::get('username'),'ReturnDatesAsStrings'=>true,'PWD'=>self::get('password'));
        self::$DbLink = sqlsrv_connect(self::get('host').','.self::get('port'),$opt);
        if(!is_resource(self::$DbLink)){
            $err = sqlsrv_errors();
            die('Database Connection Error('.$err[0]['message'].')');
        }
        // 测试连接是否可用
        /*
        $stmt = sqlsrv_query(self::$DbLink,'select 1 num');
        if(!is_resource($stmt)){
            $err = sqlsrv_errors();
            die('Database Query Error('.$err[0]['message'].')');
        }
        sqlsrv_free_stmt($stmt);
        */
    }

    /**
     * 查询SQL语句
     * @param $sql
     * @param array $params
     * @return array|bool
     */
    public static function executeQuery($sql,$params=array()){
        self::$SqlStr = $sql;
        self::$ErrorMsg = '';
        if(empty($sql)) return false;
        self::connect();
        if(!is_array($params)){
            $params = array();
        }
        $stmt = sqlsrv_query(self::$DbLink,self::$SqlStr,$params);
        if(!is_resource($stmt)){
            $err = sqlsrv_errors();
            self::$ErrorMsg = $err[0]['message'];
            return false;
        }
        $arr = explode(';',$sql);
        if(count($arr)>1){
            for($i=count($arr);$i>1;$i--){
                sqlsrv_next_result($stmt);
            }
        }
        $rows = array();
        while($row = sqlsrv_fetch_array($stmt,SQLSRV_FETCH_ASSOC)){
            $rows[] = $row;
        }
        sqlsrv_free_stmt($stmt);
        return $rows;
    }

    /**
     * 查询SQL语句
     * @param $sql
     * @param array $params
     * @return bool|int
     */
    public static function executeCount($sql,$params=array()){
        self::$SqlStr = $sql;
        self::$ErrorMsg = '';
        if(empty($sql)) return false;
        self::connect();
        if(!is_array($params)){
            $params = array();
        }
        $stmt = sqlsrv_query(self::$DbLink,self::$SqlStr,$params);
        if(!is_resource($stmt)){
            $err = sqlsrv_errors();
            self::$ErrorMsg = $err[0]['message'];
            return false;
        }
        $row = sqlsrv_fetch_array($stmt,SQLSRV_FETCH_NUMERIC);
        $count = 0;
        if(is_array($row) && count($row)==1){
            $count = intval($row[0]);
        }
        sqlsrv_free_stmt($stmt);
        return $count;
    }

    /**
     * 执行SQL语句
     * @param $sql
     * @param array $params
     * @return bool|int
     */
    public static function executeUpdate($sql,$params=array()){
        self::connect();
        self::$SqlStr = $sql;
        self::$ErrorMsg = '';
        if(empty($sql)) return false;
        self::connect();
        if(!is_array($params)){
            $params = array();
        }
        $stmt = sqlsrv_query(self::$DbLink,self::$SqlStr,$params);
        if(!is_resource($stmt)){
            $err = sqlsrv_errors();
            self::$ErrorMsg = $err[0]['message'];
            return false;
        }
        $num = sqlsrv_rows_affected($stmt);
        sqlsrv_free_stmt($stmt);
        return $num;
    }

    /**
     * 返回服务器信息
     * @return array
     */
    public static function serverInfo(){
        self::connect();
        return sqlsrv_server_info(self::$DbLink);
    }

    /**
     * 返回客户端信息
     * @return array|null
     */
    public static function clientInfo(){
        self::connect();
        return sqlsrv_client_info(self::$DbLink);
    }

    /**
     * 构建表SQL
     * @param $table
     * @return string
     */
    private static function tableSql($table){
        if(empty($table)) return '';
        if(is_array($table)){
            $arr = array();
            foreach($table as $k=>$v){
                $arr[] = '['.$v.'] '.$k;
            }
            $tableSql = implode(',',$arr);
        }else{
            $tableSql = '['.$table.']';
        }
        return $tableSql;
    }

    /**
     * 构建字段SQL
     * @param $field
     * @return string
     */
    private static function fieldSql($field){
        if(empty($field)) return '*';
        if(is_array($field)){
            $fieldSql = '['.implode('],[',$field).']';
        }else{

            $fieldSql = $field;
        }
        return $fieldSql;
    }

    /**
     * 构建条件SQL
     * @param $where
     * @return string
     */
    private static function whereSql($where){
        if(empty($where)) return '';
        $whereSql = ' where ';
        if(is_array($where)){
            $whereSql .= implode(' and ',$where);
        }else{
            $whereSql .= $where;
        }
        return $whereSql;
    }

    /**
     * 构建排序SQL
     * @param $order
     * @return string
     */
    private static function orderSql($order){
        if(empty($order)) return '';
        $orderSql = ' order by ';
        if(is_array($order)){
            $orderSql .= implode(',',$order);
        }else{
            $orderSql .= $order;
        }
        return $orderSql;
    }

    /**
     * 统计数据量
     * @param $table
     * @param $where
     * @param null $values
     * @return bool|int
     */
    public static function count($table,$where,$values=null){
        if(empty($table)) return false;
        $tableSql = self::tableSql($table);
        $whereSql = self::whereSql($where);
        self::$SqlStr = 'select count(*) from '.$tableSql.$whereSql;
        return self::executeCount(self::$SqlStr,$values);
    }

    /**
     * 添加数据
     * @param $table
     * @param $data
     * @return bool|int|string
     */
    public static function add($table,$data){
        if(empty($table) || !is_array($data) || count($data)==0) return false;
        self::connect();
        $fields = array();
        $values = array();
        $places = array();
        foreach($data as $key=>$value){ // 忽略以下划线开头的键
            if(stripos($key,'_')===0) continue;
            $fields[] = '['.$key.']';
            $values[] = $value;
            $places[] = '?';
        }
        self::$SqlStr = 'insert into ['.$table.']('.implode(',',$fields).')values('.implode(',',$places).')';
        $num = self::executeUpdate(self::$SqlStr,$values);
        return $num>0;
    }

    /**
     * 插入数据并获取最后插入数据的ID(自增长数据)
     * @param $table
     * @param $data
     * @return bool|int|string
     */
    public static function autoIdAdd($table,$data){
        if(empty($table) || !is_array($data) || count($data)==0) return false;
        self::connect();
        $fields = array();
        $values = array();
        $places = array();
        foreach($data as $key=>$value){ // 忽略以下划线开头的键
            if(stripos($key,'_')===0) continue;
            $fields[] = '['.$key.']';
            $values[] = $value;
            $places[] = '?';
        }
        self::$SqlStr = 'insert into ['.$table.']('.implode(',',$fields).')values('.implode(',',$places).');select top 1 SCOPE_IDENTITY() id';
        $rows = self::executeQuery(self::$SqlStr,$values);
        if(!is_array($rows) || count($rows)==0) return false;
        $id = $rows[0]['id'];
        if(!is_numeric($id)) return false;
        return $id;
    }

    /**
     * 更新数据
     * @param $table
     * @param $data
     * @param $where
     * @param null $value
     * @return bool
     */
    public static function update($table,$data,$where,$value=null){
        if(empty($table) || empty($where)) return false;
        self::connect();
        $whereSql = self::whereSql($where);
        $values = array();
        $places = array();
        foreach($data as $key=>$v){
            if(stripos($key,'_')===0) continue;
            $values[] = $v;
            $places[] = '['.$key.']=?';
        }
        foreach($value as $v){
            $values[] = $v;
        }
        self::$SqlStr = 'update ['.$table.'] set '.implode(',',$places).$whereSql;
        $num = self::executeUpdate(self::$SqlStr,$values);
        return $num>0;
    }

    /**
     * 删除数据
     * @param $table
     * @param $where
     * @param null $values
     * @return bool
     */
    public static function delete($table,$where,$values=null){
        if(empty($table) || empty($where)) return false;
        self::connect();
        $tableSql = self::tableSql($table);
        $whereSql = self::whereSql($where);
        self::$SqlStr = 'delete from '.$tableSql.$whereSql;
        $num = self::executeUpdate(self::$SqlStr,$values);
        return $num>0;
    }

    /**
     * 查询数据(全部)
     * @param $table
     * @param $field
     * @param $where
     * @param $order
     * @param null $values
     * @return array|bool
     */
    public static function fetchAll($table,$field,$where,$order,$values=null){
        if(empty($table)) return false;
        $tableSql = self::tableSql($table);
        $fieldSql = self::fieldSql($field);
        $whereSql = self::whereSql($where);
        $orderSql = self::orderSql($order);
        self::$SqlStr = 'select '.$fieldSql.' from '.$tableSql.$whereSql.$orderSql;
        $rows = self::executeQuery(self::$SqlStr,$values);
        return $rows;
    }

    /**
     * 查询数据(分页)
     * @param $table
     * @param $page
     * @param $size
     * @param $field
     * @param $where
     * @param $order
     * @param null $values
     * @return array|bool
     */
    public static function fetchPage($table,$page,$size,$field,$where,$order,$values=null){
        if(empty($table)) return false;
        $tableSql = self::tableSql($table);
        $fieldSql = self::fieldSql($field);
        $whereSql = self::whereSql($where);
        $orderSql = self::orderSql($order);
        $size = intval($size);
        if($size'.$start;
        $rows = self::executeQuery(self::$SqlStr,$values);
        return $rows;
    }

    /**
     * 查询数据(单条)
     * @param $table
     * @param $field
     * @param $where
     * @param $order
     * @param null $values
     * @return bool
     */
    public static function fetchOne($table,$field,$where,$order,$values=null){
        if(empty($table)) return false;
        $tableSql = self::tableSql($table);
        $fieldSql = self::fieldSql($field);
        $whereSql = self::whereSql($where);
        $orderSql = self::orderSql($order);
        self::$SqlStr = 'select top 1 '.$fieldSql.' from '.$tableSql.$whereSql.$orderSql;
        $rows = self::executeQuery(self::$SqlStr,$values);
        if(!is_array($rows) || count($rows)!=1) return false;
        return $rows[0];
    }

    /**
     * 获取单个字段数据
     * @param $table
     * @param $name
     * @param string $def
     * @param null $where
     * @param null $order
     * @param null $values
     * @return string
     */
    public static function fetchField($table,$name,$def='',$where=null,$order=null,$values=null){
        if(empty($name)) return $def;
        $data = self::fetchOne($table,$name,$where,$order,$values);
        if(!is_array($data)) return $def;
        return $data[$name];
    }

    /**
     * 获取最后插入的数据ID
     * @param $table
     * @return int|string
     */
    public static function lastId($table){
        $sql = 'select top 1 IDENT_CURRENT(\'['.$table.']\') id';
        $rows = self::executeQuery($sql);
        if(!is_array($rows) || count($rows)!=1) return -1;
        $id = $rows[0]['id'];
        if(!is_numeric($id)) return -1;
        return $id;
    }

    /**
     * 获取最后执行的SQL语句
     * @return mixed
     */
    public static function lastSql(){
        return self::$SqlStr;
    }

    /**
     * 获取错误
     * @return mixed
     */
    public static function lastError(){
        return self::$ErrorMsg;
    }

    /**
     * 获取连接字串
     * @return mixed
     */
    public static function getDb(){
        return self::$DbLink;
    }

    /**
     * 关闭连接
     */
    public static function close(){
        if(is_resource(self::$DbLink)) sqlsrv_close(self::$DbLink);
        self::$DbLink = null;
    }

}
?>