0

0

PHP for MsSQL 操作类

php中文网

php中文网

发布时间:2016-08-04 08:53:39

|

1703人浏览过

|

来源于php中文网

原创

跳至 [1] [2] [全屏预览]
请先安装 MsSQL 扩展。");

        $this->dbhost = !empty($db['hostname']) ? $db['hostname'] : 'localhost';
        $this->dbuser = $db['username'];
        $this->dbpw = $db['password'];
        $this->dbname = $db['dbname'];
        $this->pconnect = !empty($db['pconnect']) ? $db['pconnect'] : 0;
        $this->connect();
    }

    public static function getdatabase($db){
        if(empty(self::$instance)){
            self::$instance = new MsSQL($db);
        }
        return self::$instance;
    }

    /**
     * 连接数据库
     * @return int
     */
    private function connect()
    {
        $func = $this->pconnect == 1 ? 'mssql_pconnect' : 'mssql_connect';
        if(!$this->connid = @$func($this->dbhost, $this->dbuser, $this->dbpw)){
            $this->halt('Can not connect to MsSQL server');
        }
		
        if(!empty($this->dbname)){
            if(!$this->select_db($this->dbname)){
                $this->halt('Cannot use database '.$this->dbname);
            }
        }

        return $this->connid;
    }

    /**
     * 选择数据库
     * @param $dbname
     * @return bool
     */
    public function select_db($dbname)
    {
        return @mssql_select_db($dbname , $this->connid);
    }

    /**
     * 直接执行sql
     * @param $sql
     * @return mixed
     */
    public function query_simple($sql)
	{
		if(empty($sql)){
            $this->halt('SQL IS NULL!');
		}

		$result = mssql_query($sql, $this->connid);

		if(!$result){  //调试用,sql语句出错时会自动打印出来
            $this->halt('MsSQL Query Error', $sql);
		}

        $this->result = $result;

		return $this->result;
	}

    /**
     * 过滤执行sql
     * @param $sql
     * @return array|mixed
     */
    public function query($sql)
    {
        $this->querynum++;
        $sql = trim($sql);
        if(preg_match("/^(select.*)limit ([0-9]+)(,([0-9]+))?$/i", $sql, $matchs)){
            $sql = $matchs[1];
            $offset = $matchs[2];
            $pagesize = $matchs[4];
            $this->result = mssql_query($sql, $this->connid) or $this->halt('MsSQL Query Error', $sql);
            return $this->limit($this->result, $offset, $pagesize);
        }elseif(preg_match("/^insert into/i", $sql)){
            $sql = "$sql; Select @@identity as insertid";
            $this->result = mssql_query($sql, $this->connid) or $this->halt('MsSQL Query Error', $sql);
            $insid = $this->fetch_row($this->result);
            $this->insertid = $insid[0];
            return $this->result;
        }else{
            $this->result = mssql_query($sql, $this->connid) or $this->halt('MsSQL Query Error', $sql);
            return $this->result;
        }
    }

    /**
     * 获取一条数据(一维数组)
     * @param $sql
     * @return array|bool
     */
    public function find($sql)
    {
        $this->result = $this->query($sql);
        $args = $this->fetch_array($this->result);
        return $args ;
    }

    /**
     * 获取多条(二维数组)
     * @param $sql
     * @param string $keyfield
     * @return array
     */
    public function findAll($sql, $keyfield = '')
    {
        $array = array();
        $this->result = $this->query($sql);
        while($r = $this->fetch_array($this->result)){
            if($keyfield){
                $key = $r[$keyfield];
                $array[$key] = $r;
            }else{
                $array[] = $r;
            }
        }
        return $array;
    }

    public function fetch_array($query, $type = MSSQL_ASSOC)
    {
        if(is_resource($query)) return mssql_fetch_array($query, $type);
        if($this->cursor < count($query)){
            return $query[$this->cursor++]; 
        }
        return FALSE; 
    }

    public function affected_rows()
    {
        return mssql_rows_affected($this->connid);
    }

    public function num_rows($query)
    {
        return is_array($query) ? count($query) : mssql_num_rows($query);
    }

    public function num_fields($query)
    {
        return mssql_num_fields($query);
    }

    public function get_result($query, $row)
    {
        return @mssql_result($query, $row);
    }

    /**
     * 释放连接资源
     * @param $query
     */
    public function free_result($query)
    {
        if(is_resource($query)) @mssql_free_result($query);
    }

    public function insert_id()
    {
        return $this->insertid;
    }

    public function fetch_row($query)
    {
        return mssql_fetch_row($query);
    }

    /**
     * 关闭数据库连接
     * @return bool
     */
    public function close()
    {
        return mssql_close($this->connid);
    }

    /**
     * 抛出错误
     * @param string $message
     * @param string $sql
     */
    public function halt($message = '', $sql = '')
    {
        $_sql = !empty($sql) ? "MsSQL Query:$sql 
" : ''; exit("
{$_sql}Message:$message");
    }

    public function limit($query, $offset, $pagesize = 0)
    {
        if($pagesize > 0){
            mssql_data_seek($query, $offset);
        }else{
            $pagesize = $offset;
        }

        $info = array();
        for($i = 0; $i < $pagesize; $i++){
            $r = $this->fetch_array($query);
            if(!$r) break;
            $info[] = $r;
        }

        $this->cursor = 0;
        return $info;
    }

    /**
     * 初始化存储过程
     * @param $proNme
     * @return resource
     */
    public function init_pro($proNme)
    {
        return mssql_init($proNme, $this->connid);
    }

    /**
     * 开始一个事务.
     */
    public function begin()
    {
        $this->query('begin tran');
    }

    /**
     * 提交一个事务.
     */
    public function commit()
    {
        $this->query('commit tran');
    }

    /**
     * 回滚一个事务.
     */
    public function rollback()
    {
        $this->query('rollback tran');
    }

    /**
     * 析构函数,关闭数据库,垃圾回收
     */
    public function __destruct()
    {
        if(!is_resource($this->connid)){
            return;
        }

        $this->free_result($this->result);
        $this->close();
    }
}

2. [代码]使用方法     跳至 [1] [2] [全屏预览]

 'localhost', //主机地址
    'username' => 'sa', //用户名
    'password' => '123', //密码
    'dbname' => 'test_db', //数据库名
);

#如果是linux,端口号不是默认1433,那么hostname就是 localhost:端口号

$db = MsSQL::getdatabase($_db); //数据库连接

#最终 $db 就是你的数据库实例

#查询示例
$sql = "select * from table1";

#查询单条:
$result = $db->find($sql);

#查询多条:
$result = $db->findAll($sql);

#执行增删改:
$result = $db->query($sql);

#...
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

3

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

7

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

30

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

2

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

8

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

3

2026.01.15

php图片上传教程汇总
php图片上传教程汇总

本专题整合了php图片上传相关教程,阅读专题下面的文章了解更多详细教程。

2

2026.01.15

phpstorm相关教程大全
phpstorm相关教程大全

本专题整合了phpstorm相关教程汇总,阅读专题下面的文章了解更多详细内容。

4

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

Swoft2.x速学之http api篇课程
Swoft2.x速学之http api篇课程

共16课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号