Php Mssql操作简单封装支持存储过程


Posted in PHP onDecember 11, 2009

核心代码:

<?php
/*
 * class :Mssql
 * time :2009-12-10
 * author :Libaochang
 * version :1.0b
 * description :mssql database access class,it can execute the procedur or sql
*/
class MssqlUtil {
  var $user = null; //database user name
  var $keys = null; //database user password
  var $host = 'localhost'; //database host name/ip and port
  var $base = null; //database name
  var $link = null; //create link
  
  /** 
   * construct function init all parmeters
   * @param <type> $host database host name/ip and port
   * @param <type> $user database user name
   * @param <type> $keys database user password
   * @param <type> $base database name
   */
  function __construct($host, $user, $keys, $base) {
    $this->host = $host;
    $this->user = $user;
    $this->keys = $keys;
    $this->base = $base;
  }
  /** 
   * create the connection
   */
  function connect() {
    $this->link = mssql_connect($this->host, $this->user, $this->keys);
    if (!$this->link) {
      die('connecting failed...check the module and setting...');
    }
    $select = mssql_select_db($this->base, $this->link);
    if (!$select) {
      die('data base is not exist...,please checke it ...');
    }
  }
  /** 
   * execute the procedur width the parameter
   * @param <type> $pName procedur name
   * @param <type> $parName parameters it's like this $par=array('@a'=>'a')
   * @param <type> $sqlTyle the procedur's parameter type, it's llike this $sqlType=array(SQLVARCHAR,SQLVARCHAR); and there is not the char single quote mark(').
   * @return <type> object array
   */
  function executeProcedur($pName, $parName, $sqlTyle) {
    $this->connect();
    $stmt = mssql_init($pName, $this->link);
    if (isset($parName)) {
      $i = 0;
      foreach ($parName as $par => $value) {
        mssql_bind($stmt, $par, $value, $sqlTyle[$i]);
        ++$i;
      }
      $res = mssql_execute($stmt);
      $this->close();
      while ($row = mssql_fetch_assoc($res)) {
        $r[] = $row;
      }
      unset($i);
      mssql_free_result($res);
      mssql_free_statement($stmt);
      return $r;
    }
  }
  /** 
   * execute procedur without the parameter
   * @param <type> $pName Procedur Name
   * @return <type> object array
   */
  function executeProcedurNoPar($pName) {
    $this->connect();
    $stmt = mssql_init($pName, $this->link);
    $res = mssql_execute($stmt);
    $this->close();
    while ($row = mssql_fetch_assoc($res)) {
      $r[] = $row;
    }
    mssql_free_result($res);
    mssql_free_statement($stmt);
    return $r;
  }
  /** 
   * Get one row return Array
   * @param <type> $sql
   * @return <type> Array
   */
  function getRowArray($sql) {
    $res = $this->query($sql);
    $r = mssql_fetch_row($res);
    mssql_free_result($res);
    return $r;
  }
  /** 
   * Get one row return object
   * @param <type> $sql Sql
   * @return <type> Object
   */
  function getRowObject($sql) {
    $res = $this->query($sql);
    $r = mssql_fetch_assoc($res);
    return $r;
  }
  /** 
   * Execute one sql
   * @param <type> $sql Sql
   * @return <type> result
   */
  function query($sql) {
    $this->connect();
    $res = mssql_query($sql, $this->link);
    $this->close();
    return $res;
  }
  /** 
   * Get every row from result by Object, Return a Array with every element is Object
   * @param <type> $sql
   * @return <type> Object Array result
   */
  function getResult($sql) {
    $res = $this->query($sql);
    while ($row = mssql_fetch_assoc($res)) {
      $r[] = $row;
    }
    unset($row);
    mssql_free_result($res);
    return $r;
  }
  /** 
   * execute a sql
   * @param <type> $sql Sql
   */
  function executeSql($sql) {
    return $this->query($sql);
  }
  /** 
   * execute a sql statement
   * @param <type> $sql
   * @return <type> int $affected rows
   */
  function querySql($sql) {
    $this->connect();
    mssql_query($sql, $this->link);
    $affected = mssql_rows_affected($this->link);
    $this->close();
    return $affected;
  }
  /** 
   * close connection
   */
  function close() {
    mssql_close();
  }
}
?>

下面说下调用

function __autoload($MssqlUtil) { 
require $MssqlUtil.'.php'; 
} 
$db = new MssqlUtil($config['host'],$config['user'],$config['keys'],$config['base']);

主要说下带参数的存储过程调用

$pName 存储过程名字 
$parName 参数,参数形式很重要,是数组类型,对应关系为 
array('@a'=>'a') @a 为存储过程里面的参数,a为要传递的值 
$sqlTyle 是存储过程参数的数据类型,是数组形式,也很重要 
array(SQLCHAR,SQLVARCHAR),注意不要加单引号等,因为SQLVARCHAR是SQL的一些常量 

带参数存储过程 
$db->executeProcedur($pName,$parName,$sqlTyle); 
无参数存储过程 
$db->executeProcedurNoPar($pName);

select * from t2 where t2.id in(select max(t2.id) from t1 join t2 on t1.id = t2.pid group by t1.id);
取每个分类的最新一条数据。此处做个记录。
t1为类别表,t2为主表

PHP 相关文章推荐
我的php学习笔记(毕业设计)
Feb 21 PHP
浅谈PHP解析URL函数parse_url和parse_str
Nov 11 PHP
thinkphp中空模板与空模块的用法实例
Nov 26 PHP
php+Mysqli利用事务处理转账问题实例
Feb 11 PHP
服务器上配置PHP运行环境教程
Feb 12 PHP
分享php分页的功能模块
Jun 16 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
Sep 30 PHP
用PHP写的一个冒泡排序法的函数简单实例
May 26 PHP
PhpStorm terminal无法输入命令的解决方法
Oct 09 PHP
PHP内置加密函数详解
Nov 20 PHP
浅谈PHP无限极分类原理
Mar 14 PHP
PhpSpreadsheet设置单元格常用操作汇总
Nov 13 PHP
php smarty模版引擎中变量操作符及使用方法
Dec 11 #PHP
phpmyadmin导入(import)文件限制的解决办法
Dec 11 #PHP
php smarty模版引擎中的缓存应用
Dec 11 #PHP
php5 图片验证码实现代码
Dec 11 #PHP
php下图片文字混合水印与缩略图实现代码
Dec 11 #PHP
一个比较简单的PHP 分页分组类
Dec 10 #PHP
PHP 采集程序中常用的函数
Dec 09 #PHP
You might like
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
2010/05/18 Javascript
javascript中检测变量的类型的代码
2010/12/28 Javascript
推荐20家国外的脚本下载网站
2011/04/28 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
基于jQuery实现模拟页面加载进度条
2013/04/01 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
一个JavaScript去除字符串末尾的空白实例代码
2014/09/22 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
基于CSS3和jQuery实现跟随鼠标方位的Hover特效
2016/07/25 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
JS中SetTimeout和SetInterval使用初探
2017/03/23 Javascript
Bootstrap 响应式实用工具实例详解
2017/03/29 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
使用npm安装最新版本nodejs
2018/01/18 NodeJs
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
2019/04/30 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python执行系统命令后获取返回值的几种方式集合
2018/05/12 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
设计部经理的岗位职责
2013/11/16 职场文书
毕业生找工作求职信
2014/08/05 职场文书
大学毕业生管理学求职信
2014/09/01 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
庆六一宣传标语
2014/10/08 职场文书
工作自我评价范文
2015/03/05 职场文书
年度考核表个人总结
2015/03/06 职场文书
美德少年事迹材料(2016推荐版)
2016/02/25 职场文书
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle