gpt4 book ai didi

PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了PHP基于PDO调用sqlserver存储过程的方法。分享给大家供大家参考,具体如下:

由于业务这边存储过程一直在sqlserver上面,所以要用php去调用它,然而我们本地的是windows,而线上又是linux,一开始使用Yii框架的一些机制去调用发现在本地一直都是好的然而到线上就不行了,找了很多方案,最后找到了pdo这种方案,而本地使用的驱动是sqlsrv线上是dblib所以需要注意下链接pdo时的驱动形式,在取结果集的时候注意windows和linux好像有所不同,在我加上set nocount on后win若果直接取结果就可以拿到最后的,然而放到linux就没了,气死人的说,索性最后我把所有的都取一遍; 。

分享整理后的一个方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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 ;
   }
}

使用举例:

?
1
2
3
4
5
6
7
8
9
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,不需要自行去更改】:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
[
   '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程序设计有所帮助.

原文链接:http://blog.csdn.net/u012655332/article/details/73526555 。

最后此篇关于PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】的文章就讲到这里了,如果你想了解更多关于PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com