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 strtok()函数的优点分析
Mar 02 PHP
php从memcache读取数据再批量写入mysql的方法
Dec 29 PHP
PHP的文件操作与算法实现的面试题示例
Aug 10 PHP
PHP+MySQL实现无极限分类栏目的方法
Dec 23 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
Dec 25 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
php中foreach结合curl实现多线程的方法分析
Sep 22 PHP
PHP实现的曲线统计图表示例
Nov 10 PHP
PHP如何读取由JavaScript设置的Cookie
Mar 22 PHP
PHP的mysqli_ssl_set()函数讲解
Jan 23 PHP
PHP echo()函数讲解
Feb 15 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
Apr 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
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
javascript 写类方式之四
2009/07/05 Javascript
国外大牛IE版本检测!现在IE都到9了,IE检测代码
2012/01/04 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
javascript数组去重方法终极总结
2014/06/05 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
实例解析jQuery中如何取消后续执行内容
2016/12/01 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
vue组件中的数据传递方法
2018/05/14 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
原生Vue 实现右键菜单组件功能
2019/12/16 Javascript
python&MongoDB爬取图书馆借阅记录
2016/02/05 Python
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
Python 查看文件的读写权限方法
2018/01/23 Python
Python实现的rsa加密算法详解
2018/01/24 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
python抓取搜狗微信公众号文章
2019/04/01 Python
详解python读取image
2019/04/03 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
想学画画?python满足你!
2020/12/24 Python
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
2014年路政工作总结
2014/12/10 职场文书
生产实习心得体会范文
2016/01/22 职场文书
各国货币符号大全
2022/02/17 杂记
netty 实现tomcat的示例代码
2022/06/05 Servers