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版(5)
Oct 09 PHP
利用递归把多维数组转为一维数组的函数
Oct 09 PHP
经典的PHPer为什么被认为是草根?
Apr 02 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
Dec 15 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
Mar 27 PHP
PHP数组与对象之间使用递归实现转换的方法
Jun 24 PHP
[原创]php求圆周率的简单实现方法
May 30 PHP
php redis实现文章发布系统(用户投票系统)
Mar 04 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
Sep 16 PHP
php转换上传word文件为PDF的方法【基于COM组件】
Jun 10 PHP
laravel清除视图缓存的代码
Oct 23 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
用IE远程创建Mysql数据库的简易程序
2006/10/09 PHP
收集的二十一个实用便利的PHP函数代码
2010/04/22 PHP
php获取随机数组列表的方法
2014/11/13 PHP
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
2014最热门的JavaScript代码高亮插件推荐
2014/11/25 Javascript
javascript进行四舍五入方法汇总
2014/12/16 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
js自定义瀑布流布局插件
2017/05/16 Javascript
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
python文本数据相似度的度量
2018/03/12 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
个人求职简历的自我评价
2013/10/19 职场文书
分公司经理岗位职责
2013/11/11 职场文书
应届大学生求职信
2013/12/01 职场文书
学校七一活动方案
2014/01/19 职场文书
五好党支部事迹材料
2014/02/06 职场文书
彩色的翅膀教学反思
2014/04/25 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
社团活动总结报告
2014/06/27 职场文书
起诉状范本
2015/05/20 职场文书
小学校园广播稿
2015/08/18 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书