PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】


Posted in PHP onOctober 07, 2017

本文实例讲述了PHP基于PDO调用sqlserver存储过程的方法。分享给大家供大家参考,具体如下:

由于业务这边存储过程一直在sqlserver上面,所以要用php去调用它,然而我们本地的是windows,而线上又是linux,一开始使用Yii框架的一些机制去调用发现在本地一直都是好的然而到线上就不行了,找了很多方案,最后找到了pdo这种方案,而本地使用的驱动是sqlsrv线上是dblib所以需要注意下链接pdo时的驱动形式,在取结果集的时候注意windows和linux好像有所不同,在我加上set nocount on后win若果直接取结果就可以拿到最后的,然而放到linux就没了,气死人的说,索性最后我把所有的都取一遍;

分享整理后的一个方法:

class StoredProcHelper
{
  private static $type = [
   'integer'=>PDO::PARAM_INT,
   'string'=>PDO::PARAM_STR,
   'null'=>PDO::PARAM_NULL,
   'boolean'=>PDO::PARAM_BOOL
  ];
  private $sql = '';//此变量在下方说明
  private $params = [];//此变量在下方说明
  private $connect_info;//此变量在下方说明
  private $pdo_connect;
  public function __construct($connect_info,$sql,$params){
    $this->sql = 'SET NOCOUNT ON;'.$sql;
    $this->params = $params;
    $this->connect_info = $connect_info;
    if(!empty($this->connect_info->dsn) && !empty($this->connect_info->username) && !empty($this->connect_info->password)){
      $this->pdo_connect = new PDO($this->connect_info->dsn,$this->connect_info->username, $this->connect_info->password);
    }
  }
  public function ExecuteProc(){
    $link = $this->pdo_connect->prepare($this->sql);
    foreach ($this->params as $key => $value){
      $link->bindParam($key,$value,self::$type[strtolower(gettype($value))]);
    }
    $link->execute();
    $i = 1;
    $res[0] = $link->fetchAll();
    while($link->nextRowset()){
      $res[$i] = $link->fetchAll();
      $i++;
    }
    return $res;
  }
}

使用举例:

public static function Example($connect_info,$mobile){
    $sql='declare @customParam int;exec you_proc @Mobile = :mobile,@OutParam=@customParam out;select @customParam as outName;';
    $params = [
      ':mobile'=>$mobile
    ];
    $pdo = new StoredProcHelper($connect_info,$sql,$params);
    $res = $pdo->ExecuteProc();
    var_dump($res);
  }

变量$sql和$params的形式如例子中表现的;

变量$connect_info的形式如下【因为本人是在Yii框架 下使用的,所以以此变量是直接根据Yii来获取数据库链接配置来进行的,如果自己有所不同可以自行更改形式以及赋值形式,在框架中方便的是不同环境下直接获取配置能分别获取到是sqlsrv和dblib,不需要自行去更改】:

[
  'dsn' => 'sqlsrv:Server=xxxxxxxxxx;Database=xxxxx',
  'username' => 'xxxxx',
  'password' => 'xxxxxxxxxxxxxxxxxxxx',
  'charset' => 'utf8',
]
//或
[
  'dsn' => 'dblib:host=xxxxxxxxxx;dbname=xxxxx',
  'username' => 'xxxxx',
  'password' => 'xxxxxxxxxxxxxxxxxxxx',
  'charset' => 'utf8',
],

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
如何限制访问者的ip(PHPBB的代码)
Oct 09 PHP
adodb与adodb_lite之比较
Dec 31 PHP
php代码运行时间查看类代码分享
Aug 06 PHP
解析在PHP中使用全局变量的几种方法
Jun 24 PHP
PHP积分兑换接口实例
Feb 09 PHP
PHP经典面试题之设计模式(经常遇到)
Oct 15 PHP
使用PHP实现生成HTML静态页面
Nov 18 PHP
php $_SESSION会员登录实例分享
Jan 19 PHP
PHP数组相加操作及与array_merge的区别浅析
Nov 26 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
Dec 02 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
Apr 20 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
May 29 PHP
PHP使用PDO调用mssql存储过程的方法示例
Oct 07 #PHP
Laravel 5.5官方推荐的Nginx配置学习教程
Oct 06 #PHP
php判断文件上传图片格式的实例详解
Sep 30 #PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
Sep 30 #PHP
PHP基于自定义函数实现的汉字转拼音功能实例
Sep 30 #PHP
PHP基于自定义函数生成笛卡尔积的方法示例
Sep 30 #PHP
php使用curl下载指定大小的文件实例代码
Sep 30 #PHP
You might like
php防止表单重复提交实例讲解
2019/02/11 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
2019/04/09 PHP
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
js计算德州扑克牌面值的方法
2015/03/04 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
2016/01/26 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
微信小程序使用wx.request请求服务器json数据并渲染到页面操作示例
2019/03/30 Javascript
17道题让你彻底理解JS中的类型转换
2019/08/08 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
2020/10/27 Javascript
[04:49]期待西雅图之战 2016国际邀请赛中国区预选赛WINGS战队赛后采访
2016/06/29 DOTA
Python装饰器基础详解
2016/03/09 Python
详解python3中tkinter知识点
2018/06/21 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
python常用函数与用法示例
2019/07/02 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
python 画函数曲线示例
2019/12/04 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
武汉高蓝德国际.net机试
2016/06/24 面试题
黄河的主人教学反思
2014/02/07 职场文书
小学师德标兵先进事迹材料
2014/05/25 职场文书
小学数学课题方案
2014/06/15 职场文书
品牌转让协议书
2014/08/20 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
绿色环保倡议书
2015/04/28 职场文书
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
2021/04/25 Python