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 相关文章推荐
全文搜索和替换
Oct 09 PHP
PHP数组交集的优化代码分析
Mar 06 PHP
模板引擎正则表达式调试小技巧
Jul 20 PHP
探讨Hessian在PHP中的使用分析
Jun 13 PHP
php ci框架验证码实例分析
Jun 26 PHP
简单谈谈php中ob_flush和flush的区别
Nov 27 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
Nov 28 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
May 27 PHP
PHPExcel笔记, mpdf导出
May 03 PHP
PHP XML和数组互相转换详解
Oct 26 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
Jun 10 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 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脚本的10个技巧(4)
2006/10/09 PHP
PHP中的正规表达式(二)
2006/10/09 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
用Greasemonkey 脚本收藏网站会员信息到本地
2009/10/26 Javascript
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
非阻塞动态加载javascript广告实现代码
2010/11/17 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
使用JavaScript和CSS实现文本隔行换色的方法
2015/11/04 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
javascript function(函数类型)使用与注意事项小结
2019/06/10 Javascript
在VUE style中使用data中的变量的方法
2020/06/19 Javascript
Python专用方法与迭代机制实例分析
2014/09/15 Python
Python编程之微信推送模板消息功能示例
2017/08/21 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
PyQt5每天必学之日历控件QCalendarWidget
2018/04/19 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
python实现简单猜单词游戏
2020/12/24 Python
python制作抽奖程序代码详解
2021/01/15 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
如何写出高质量、高性能的MySQL查询
2014/11/17 面试题
计算机专业职业生涯规划范文
2014/01/19 职场文书
早读迟到检讨书
2014/01/24 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
银行实习推荐信
2015/03/27 职场文书
税务会计岗位职责
2015/04/02 职场文书
工作态度不好检讨书
2015/05/06 职场文书
2015年信息中心工作总结
2015/05/25 职场文书
帝企鹅日记观后感
2015/06/10 职场文书
工作简报格式范文
2015/07/21 职场文书
护理培训心得体会
2016/01/22 职场文书