[PHP]透过[jquery] 以 [Ajax]方式使用[Stored Procedure]取得[MSSQL]资料

网上找到的参考有点混乱,因此统整一下
使用环境:
XAMPP 3.2.4
jquery.min.js 2.0.0
SQL Server2012

安装XAMPP连结MSSQL (使用PDO方法)

这次想要用Ajax捞取Stored Procedure的执行结果
由于Stored Procedure的执行结果存在多个Table,要指定取得结果,还有传入参数,搞了半天,纪录一下。

PHP方面想把查询结果放入表格

<table id="employees" cellpadding="6" border='1' align="center"><thead><tr align="center" valign='middle'><td>工号</td><td>姓名</td><td>部门</td><td>职称</td><td>分数</td><td>栏位</td></tr></thead><tbody id="tbodyid"></tbody></table>

Ajax方面

当按下查询按钮 id="ook"的时候
如果输入参数有值就执行
透过post json方式将参数传入php中(先将参数做成阵列,可以一次传送)
结果的地方,可以指定要取得哪个Stored Procedure的回传结果。
data[0]...第1个table...以此类推

$(document).on('click', '#ook', function() {    var number = $("#search-box").val();    if (number != '') {        var ip = $("#ip").text();        var tex = $("#flo").text();        var dataJSON = {};        dataJSON["number"] = number;        dataJSON["ip"] = ip;        dataJSON["tex"] = tex;        var $employees = $("#employees tbody");        $("#tbodyid").empty();        $.ajax({            url: "sop.php",            type: "POST",            dataType: "json",            data: JSON.stringify(dataJSON),            success: function(data) {                console.log(data);                // debugger                $.each(data[0], function(index, item) {                    $employees.append(                        "<tr style='background-color: transparent;'>" +                        "<td>" + item.工号 + "</td>" +                        "<td>" + item.NAME + "</td>" +                        "<td>" + item.DEPT + "</td>" +                        "<td>" + item.PTITL + "</td>" +                        "<td>" + item.PLEVEL + "</td>" +                        "<td>" + item.栏位 + "</td>" +                        "</tr>"                    );                })                $.each(data[1], function(index, item) {                    $employ.append(                        "<tr style='background-color: transparent;'>" +                        "<td>" + item.PENNO + "</td>" +                        "<td>" + item.PNAME + "</td>" +                        "<td>" + item.PTITL + "</td>" +                        "<td>" + item.PLEVEL + "</td>" +                        "<td>" + item.DEPT + "</td>" +                        "</tr>"                    );                })            }        });    }});

Stored Procedure方面 存在多个结果

http://img2.58codes.com/2024/20132436XcHBQAptmE.png

注意
PDO 连接 MSSQL EXEC Stored Proc 会有无回传值状况,
这时候你会取得空的array,因此在stored proc中加入SET NOCOUNT ON (建议),
或者PHP的执行sql语法前加上SET NOCOUNT ON 即可!

USE [TEST]GO/****** Object:  StoredProcedure [dbo].[捞人员资料_WEB]    Script Date: 2020/11/12 下午 13:55:44 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[捞人员资料_WEB]@登入者    VARCHAR(50)ASSET NOCOUNT ON

PHP方面 (传入参数)

透过EXEC的方法执行stored proc
并用物件阵列方式回传执行结果
1.使用urldecode解析JSON档(不然你会一直看到编码资料),在接收参数丢进变数中
2.使用PDO连结sqlsrv
3.执行Stored Procedure 参数用?传入
4.bindParam(1, $number, PDO::PARAM_STR); 将$number参数连结传入
5.用execute() 函数执行结果
6.跑while迴圈,透过nextRowset()取得下一个执行结果
7.编码后反输出回Ajax

$value = urldecode(file_get_contents('php://input'));$obj = json_decode($value);$number = $obj->{'number'};$conn = new PDO("sqlsrv:server=X.X.X.X;Database=TEST","帐号","密码");$query = ("EXEC dbo.捞人员资料_WEB ?");$query_stored = $conn->prepare($query); $query_stored->bindParam(1, $number, PDO::PARAM_STR);$query_stored->execute();while ($query_stored->columnCount()) {    $tab[] = $query_stored->fetchAll(PDO::FETCH_ASSOC);    $query_stored->nextRowset();}echo json_encode($tab);

http://img2.58codes.com/2024/201324368Z0uvjaEON.png
http://img2.58codes.com/2024/20132436tvJxOb6jGu.png

回传成功!
http://img2.58codes.com/2024/20132436hzNBhgIwDi.jpg


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章