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

2025-05-27 0 62

本文实例讲述了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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】 https://www.kuaiidc.com/71819.html

相关文章

发表评论
暂无评论