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 相关文章推荐
解决phpmyadmin 乱码,支持gb2312和utf-8
Nov 20 PHP
PHP+MySQL 制作简单的留言本
Nov 02 PHP
php入门之连接mysql数据库的一个类
Apr 21 PHP
解析dedeCMS验证码的实现代码
Jun 07 PHP
php创建基本身份认证站点的方法详解
Jun 08 PHP
php下拉选项的批量操作的实现代码
Oct 14 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
Jun 21 PHP
PHP中Fatal error session_start()错误解决步骤
Aug 05 PHP
php采用curl实现伪造IP来源的方法
Nov 21 PHP
php将csv文件导入到mysql数据库的方法
Dec 24 PHP
PHP实现动态web服务器方法
Jul 29 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
Jan 04 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面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
基于xcache的配置与使用详解
2013/06/18 PHP
Symfony2学习笔记之模板用法详解
2016/03/17 PHP
php ajax confirm 删除实例详解
2019/03/06 PHP
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
Javascript 面向对象特性
2009/12/28 Javascript
javascript之querySelector和querySelectorAll使用介绍
2011/12/20 Javascript
Jquery实现视频播放页面的关灯开灯效果
2013/05/27 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
jquery使整个div区域可以点击的方法
2015/06/24 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
Python中使用dom模块生成XML文件示例
2015/04/05 Python
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
python 获取url中的参数列表实例
2018/12/18 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
Python CategoricalDtype自定义排序实现原理解析
2020/09/11 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
建筑自我鉴定
2013/10/19 职场文书
师范学院教师自荐书
2014/01/31 职场文书
中学生教师节演讲稿
2014/09/03 职场文书
医学检验专业自荐信
2014/09/18 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
先进党组织事迹材料
2014/12/26 职场文书
个人总结格式范文
2015/03/09 职场文书
课改心得体会范文
2016/01/25 职场文书
基于Python的EasyGUI学习实践
2021/05/07 Python