本文实例讲述了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
相关文章
猜你喜欢
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 个人网站搭建:如何挑选具有弹性扩展能力的服务器? 2025-06-10
- 个人服务器网站搭建:如何选择适合自己的建站程序或框架? 2025-06-10
- 64M VPS建站:能否支持高流量网站运行? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
云服务器上建站:操作系统选型(Linux vs Windows)的影响
2025-06-04 45 -
2025-05-25 69
-
2025-05-25 46
-
2025-05-29 59
-
2025-06-04 86
热门评论

