PHP操作MSSQL数据库类

<?php
class sql
{
    private $link;//连接资源
    private $result;//查询结果
    private $num = 0;//结果行数
    private $params = array();//参数数组
    private $sqlstr;//当前执行的SQL语句或存储过程
    //构造函数,默认连接本机,master数据库,账号sa,空密码
    public function __construct($addr = "127.0.0.1", $db = "master", $user = "sa", $pwd = "123456")
    {
        if (!$this->connect($addr, $db, $user, $pwd))
        {
            throw new Exception("无法连接数据库");
        }
    }
    //析构函数,关闭数据库连接
    public function __destruct()
    {
        $this->clear($this->result);
        $this->close();
    }
    //执行sql语句或存储过程
    public function execute($sql)
    {       
        if (!$this->isProc($sql))
        {
            $stmt = mssql_init($sql, $this->link);
            $param = array_keys($this->params);
            $value = array_values($this->params);
            for ($i = 0, $j = count($this->params); $i < $j; $i++)
            {
                (gettype($value) == integer) ? $sqlType = SQLINT1 : $sqlType = SQLVARCHAR;
                mssql_bind($stmt, $param[$i], $value[$i], $sqlType, false);
            }
            if (!($this->result = mssql_execute($stmt)))
            {
                throw new Exception("存储过程执行出错");
            }
            unset($stmt);           
        }
        else
        {           
            if (!($this->result = @mssql_query($sql, $this->link)))
            {
                throw new Exception("SQL语句执行出错");
            }
        }
        $this->sqlstr = $sql;
        unset($this->params);
        return $this->result;
    }
    //返回执行的SQL语句
    public function getSqlStr()
    {
        return $this->sqlstr;
    }
    //获取返回的行数
    public function getRowNum($sql)
    {
        $this->execute($sql);
        $this->num = mssql_num_rows($this->result);
        return  $this->num;
    }
    //查询后直接返回json格式数据
    public function getJsonResult($sql,$num)
    {
        $this->execute($sql);
        return $this->toJson($num);
    }
    //添加存储过程参数,同时返回添加后的参数数组
    public function addParam($param, $value)
    {
       $this->params[$param] = $value;
       return $this->params;
    }   
    //转换为json格式
    private function toJson($num)
    {
        if (!$this->result) return;
        $num == 0 ? $num = mssql_num_fields($this->result) : $num;
        while($row = mssql_fetch_object($this->result))
        {
            foreach ($row as $key=>$val)
            {
                $rows[$key] = urlencode(iconv("gbk","utf-8",$val));
            }
            $arr[] = $rows;
        }
        $str = $_GET["callback"].'({"totalCount":"'.$num.'","data":'.json_encode($arr).'})';
        return urldecode(iconv("utf-8","gbk",$str));
    }
    //判断是否存储过程
    private function isProc($str)
    {
        return preg_match("/insert/b/",$str) || preg_match("/update/b/",$str) ||
            preg_match("/delete/b/",$str) || preg_match("/select/b/",$str);
    }
    //连接数据库,返回数据库连接资源
    private function connect($addr, $db, $user, $pwd)
    {
        if ($this->link = @mssql_connect($addr, $user, $pwd, true))
        {
            return @mssql_select_db($db, $this->link) ? true : false;
        }
        else
        {
            throw new Exception("无法连接数据库");
        }
    }   
    //清除数据库连接资源
    private function clear($query)
    {
        if ($query) mssql_free_result($query);
    }
    //关闭数据库连接
    private function close()
    {
        if ($this->link) mssql_close($this->link);
    }
}
?>

 

使用举例:

<?php
require_once("sql.php");
class user
{
    private $sql;
    private $func;
    public function __construct()
    {
        $this->sql = new sql();
    }
    public function login($user, $pwd)
    {
        $str = "select * from t_user where username='$user' and password='$pwd'";
        if ($this->sql->getRowNum($str) != 0)
        {
            session_start();
            $_SESSION["username"] = $user;
            echo "{success:true, username:$user}";
        }
        else
        {
            echo "{success:false}";
        }
    }
    public function search($username, $dept, $start, $limit)
    {
        $str = "select * from t_user where 1=1";

        $num = $this->sql->getRowNum($str);
        $str = "select top $limit * from t_user where ";
        $str .= " username not in (select top $start username from t_user order by username desc)";
        $str .= " order by username desc";
        echo $this->sql->getJsonResult($str, $num);
    }
}
?>

例子都是返回Json字符串的,我这里主要是方便前端接口,例如ExtJs。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值