PHP使用PDO调用sqlserver存储过程记录【分享个通用方法】
来源:互联网 发布:php bin2hex写入文件 编辑:程序博客网 时间:2024/06/05 19:37
由于业务这边存储过程一直在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',],
阅读全文
2 0
- PHP使用PDO调用sqlserver存储过程记录【分享个通用方法】
- [PHP]PDO调用存储过程
- php调用sqlserver存储过程使用事务处理
- VC调用存储过程的通用方法(SQLServer篇)
- VC调用存储过程的通用方法(SQLServer篇)
- VC调用存储过程的通用方法(SQLServer篇)
- VC调用存储过程的通用方法(SQLServer篇)
- VC调用存储过程的通用方法(SQLServer篇)
- VC调用存储过程的通用方法(SQLServer篇)
- VC调用存储过程的通用方法(SQLServer篇)
- PHP PDO调用sqlsrv的存储过程
- java 调用通用存储过程(Sqlserver)
- php PDO调用多个结果集的mysql存储过程
- [转载]VC调用存储过程的通用方法(SQLServer篇)
- C#调用存储过程的通用方法
- 使用SqlSrv调用sqlserver的存储过程
- 通用分页存储过程(sqlServer)
- 通用sqlserver分页存储过程
- Elasticsearch5和head最新插件学习,JavaAPI demo
- Leetcode 474. Ones and Zeroes
- 刷清橙OJ--A1089.阶乘计算
- Unity 阻止手机熄屏
- JDK1.8的新特性——注解Annotation更多场景的使用
- PHP使用PDO调用sqlserver存储过程记录【分享个通用方法】
- Leetcode Add Binary
- Docker 安装
- 第三方登陆 ,微信扫码登陆
- AI Fintech 驱动智能金融时代到来
- Watch The Movie
- 深度好文《武侠小说写作指南》 作者为起点副总编ZENK(上)
- DOM节点层次图
- jdk-CyclicBarrier(一)