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 相关文章推荐
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
Nov 18 PHP
php下将XML转换为数组
Jan 01 PHP
PHP下常用正则表达式整理
Oct 26 PHP
PHP中的cookie不用刷新就生效的方法
Feb 04 PHP
Linux下CoreSeek及PHP扩展模块的安装
Sep 23 PHP
PHP保存带BOM文件的方法
Feb 12 PHP
php字符串函数学习之strstr()
Mar 27 PHP
PHP实现163邮箱自动发送邮件
Mar 29 PHP
PHP页面间传递值和保持值的方法
Aug 24 PHP
Laravel重写用户登录简单示例
Oct 08 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
Jul 26 PHP
php+js实现点赞功能的示例详解
Aug 07 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内置加密函数详解
2016/11/20 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
laravel 实现划分admin和home 模块分组
2019/10/15 PHP
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
2014/08/01 Javascript
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
2015/01/01 NodeJs
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
jquery中radio checked问题
2015/03/16 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
Vue.js中用v-bind绑定class的注意事项
2016/12/13 Javascript
jQuery输入框密码的显示隐藏【代码分享】
2017/04/29 jQuery
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
Python中暂存上传图片的方法
2015/02/18 Python
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
解决python写入mysql中datetime类型遇到的问题
2018/06/21 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
2019/07/22 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
三个python爬虫项目实例代码
2019/12/28 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
python golang中grpc 使用示例代码详解
2020/06/03 Python
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
大学同学聚会邀请函
2014/01/19 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
程序员求职信
2014/04/16 职场文书
企业承诺书格式
2014/05/21 职场文书
保洁公司服务承诺书
2014/05/28 职场文书
药剂专业求职信
2014/06/20 职场文书
国产动画《万圣街》日语配音版制作决定!
2022/03/20 国漫