php7.2连接sqlserver2017并调用存储过程

32 篇文章 0 订阅
26 篇文章 2 订阅

php与mysql的配置很常见,但偶尔需要用php连接sqlserver时,就要稍费一些手脚。

基本配置:
Windows 10 企业版;Apache2.4;php7.2.4;SQL Server 2017 EXPRESS;

按照网上多数的文献,要先从微软官网上下载 用于连接 SQL Server 的php扩展。
网址是:https://www.microsoft.com/en-us/download/details.aspx?id=20098
从这个上面可以下载 SQLSRV40.EXE。执行后解压得到如下的文件结构:
在这里插入图片描述
但是实验下来,这里的dll只能用于php7.0。 php7.2需要的扩展 要从GITHUB下载。下载地址:https://github.com/Microsoft/msphpsql/releases/tag/v5.2.0-RC

在这里插入图片描述
选择上图的 “Windows-7.2.zip”下载。
解压后有“X64"与"X86"两个版本。选择"X64"版本
在这里插入图片描述
这里有线程安全与非线程安全两个版本,为了确定应该要选择的版本,通过在命令行下执行php -i 或者 phpinfo(); 查看php的信息
在这里插入图片描述
从红笔圏出来的内容可以看出是TS版本。

由于只想使用pdo方式连接,所以选择了上述4个dll中的php_pdo_sqlsrv_72_ts.dll
放入到php的扩展文件夹 ext 中。

然后修改配置文件 php.ini
加入:
extension = php_pdo_sqlsrv_72_ts.dll

重启apache服务器,再次查看php信息
在这里插入图片描述
从上面的信息中可以看出sqlserver 的pdo扩展已经启用了。

为了测试用php调用存储过程的代码,用sql脚本建立一个简单的存储过程

CREATE PROCEDURE [dbo].[test]
  @p AS varchar(100) 
AS
BEGIN
  select @p;
END
GO

调用存储过程的php代码如下:

<?php

$db = new PDO( "sqlsrv:Server=.\SQLEXPRESS;Database=test1", 'sa', 'sa');   

//执行存储过程,返回结果集
function execStoreProc($db,$storeProcName,$paras)
{
	$paraList='';
	foreach ($paras as $para) {
		$paraList.=",'$para'";
	}
	if($paraList){
		$paraList=" ".substr($paraList, 1)." ;";
	}else{
		$paraList=" ;";
	}

	$sql="exec ".$storeProcName.$paraList;
	print($sql);
	$stmt = $db->prepare($sql, array($db::ATTR_CURSOR=>$db::CURSOR_SCROLL)); 
	$stmt->execute();

	// 取得结果集
	while($rowSet = $stmt->fetchAll($db::FETCH_NUM))
	{
		$result = $rowSet;
		$stmt->nextRowset();
	}
	return $result;
}

$res = execStoreProc($db,'test',['hello!']);

var_dump($res);

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值