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中的正规表达式(一)
Oct 09 PHP
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
php 中英文语言转换类代码
Aug 11 PHP
php中mysql连接方式PDO使用详解
Feb 25 PHP
深入理解PHP中的empty和isset函数
May 26 PHP
php base64 编码与解码实例代码
Mar 21 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
May 24 PHP
php实现数组重复数字统计实例
Sep 30 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 PHP
laravel中的fillable和guarded属性详解
Oct 23 PHP
Laravel框架Eloquent ORM删除数据操作示例
Dec 03 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 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
php生成文件
2007/01/15 PHP
详解PHP导入导出CSV文件
2014/11/03 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
JS DOM 操作实现代码
2010/08/01 Javascript
5分钟理解JavaScript中this用法分享
2013/11/09 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
2016/06/03 Javascript
Angular表单验证实例详解
2016/10/20 Javascript
ReactNative之键盘Keyboard的弹出与消失示例
2017/07/11 Javascript
详解AngularJS1.x学习directive 中‘&amp; ’‘=’ ‘@’符号的区别使用
2017/08/23 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
js实现京东秒杀倒计时功能
2019/01/21 Javascript
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
详解Python发送邮件实例
2016/01/10 Python
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
Python第三方库的安装方法总结
2016/06/06 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
python3+PyQt5实现自定义窗口部件Counters
2018/04/20 Python
Python实现手写一个类似django的web框架示例
2018/07/20 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
python安装gdal的两种方法
2019/10/29 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
幸福家庭事迹材料
2014/02/03 职场文书
golang内置函数len的小技巧
2021/07/25 Golang
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python
vue elementUI批量上传文件
2022/04/26 Vue.js