网上找到的参考有点混乱,因此统整一下
使用环境:
XAMPP 3.2.4
jquery.min.js 2.0.0
SQL Server2012
安装XAMPP连结MSSQL (使用PDO方法)
这次想要用Ajax捞取Stored Procedure的执行结果
由於Stored Procedure的执行结果存在多个Table,要指定取得结果,还有传入参数,搞了半天,纪录一下。
<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>
当按下查询按钮 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>"
);
})
}
});
}
});
注意
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 ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[捞人员资料_WEB]
@登入者 VARCHAR(50)
AS
SET NOCOUNT ON
透过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);
回传成功!
物件导向程序设计是什麽? 英文原文:Object-oriented programming,简称 O...
今天写一些浏览器跟 DOM 的东西。 DOM 全名是 Document Object Model,是...
K9s - Kubernetes CLI To Manage Your Clusters In St...
前一天中我们讲解了如何利用Vue CLI快速建立专案,再进入到专案开发之前,还是有一些知识需要恶补的...
本篇介绍固定navBar应用篇—仿IT邦帮忙 每进入iT邦帮忙网站,忍不住都会滑一下卷轴吧?上方h...