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 相关文章推荐
聊天室php&mysql(三)
Oct 09 PHP
第十三节--对象串行化
Nov 16 PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
Mar 30 PHP
php中使用Imagick实现图像直方图的实现代码
Aug 30 PHP
提升PHP性能的21种方法介绍
Jun 25 PHP
phpnow php探针环境检测代码
Nov 04 PHP
php文件上传简单实现方法
Jan 24 PHP
php实现统计目录文件大小的函数
Dec 25 PHP
PHP实现的随机IP函数【国内IP段】
Jul 20 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
Apr 16 PHP
PHP实现15位身份证号转18位的方法分析
Oct 16 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
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
PHP 查找字符串常用函数介绍
2012/06/07 PHP
Zend的Registry机制的使用说明
2013/05/02 PHP
php实现webservice实例
2014/11/06 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
纯js实现背景图片切换效果代码
2010/11/14 Javascript
JavaScript 32位整型无符号操作示例
2013/12/08 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
原生JavaScript编写canvas版的连连看游戏
2016/05/29 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
js动态生成表格(节点操作)
2021/01/12 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
[16:01]夜魇凡尔赛茶话会 第二期01:你比划我猜
2021/03/11 DOTA
Python3字符串学习教程
2015/08/20 Python
对Python中的@classmethod用法详解
2018/04/21 Python
python中自带的三个装饰器的实现
2019/11/08 Python
德国汉莎航空中国官网: Lufthansa中国
2017/03/30 全球购物
DNA测试:Orig3n
2019/03/01 全球购物
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
自考毕业生自我鉴定
2013/11/04 职场文书
毕业生个人的求职信范文
2013/12/03 职场文书
中国在我心中演讲稿
2014/09/13 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书
导游词之介休绵山
2019/12/31 职场文书
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电