php - 使用 SQL Server 和 PHP 显示存储过程的结果
问题描述
我正在尝试使用 PHP 和 SQL 服务器显示存储过程的输出。存储过程是一个SELECT
语句。截至目前,我最终处于else
显示成功消息的状态,但我无法显示查询结果。这是功能:
function account_search_sp($account_number,$occupant_code,$name,$address,$bill_code,$utility_code){
global $db;
sqlsrv_configure("WarningsReturnAsErrors", 0);
$sql = "EXEC sp_cigar_account_search @AcctNo= ?, @OccupantCode= ?, @Name= ?, @Address= ?, @BillCode= ?, @UtilityType= ?";
$procedure_params = array(
array(&$account_number, SQLSRV_PARAM_IN),
array(&$occupant_code, SQLSRV_PARAM_IN),
array(&$name, SQLSRV_PARAM_IN),
array(&$address, SQLSRV_PARAM_IN),
array(&$bill_code, SQLSRV_PARAM_IN),
array(&$utility_code, SQLSRV_PARAM_IN)
);
$stmt = sqlsrv_prepare($db, $sql, $procedure_params);
$result = sqlsrv_execute($stmt);
if( !$result ) {
//Show errors
echo "Die error <br>";
die( print_r( sqlsrv_errors(), true));
}else{
echo "<br><h3>Success</h3><br>";
sqlsrv_next_result($stmt);
}
return $stmt; }
如果我在 SSMS 中运行存储过程,例如使用 200 作为帐号,我会取回数据。
我正在使用 PHP 7.4
任何帮助表示赞赏。如果我需要包含更多信息,请告诉我。
解决方案
如果我正确理解了这个问题,您需要使用sqlsrv_ferch_array()
or获取数据sqlsrv_fetch_object()
:
<?
function account_search_sp($account_number, $occupant_code, $name, $address, $bill_code, $utility_code) {
global $db;
sqlsrv_configure("WarningsReturnAsErrors", 0);
$sql = "EXEC sp_cigar_account_search @AcctNo= ?, @OccupantCode= ?, @Name= ?, @Address= ?, @BillCode= ?, @UtilityType= ?";
$procedure_params = array(
array(&$account_number, SQLSRV_PARAM_IN),
array(&$occupant_code, SQLSRV_PARAM_IN),
array(&$name, SQLSRV_PARAM_IN),
array(&$address, SQLSRV_PARAM_IN),
array(&$bill_code, SQLSRV_PARAM_IN),
array(&$utility_code, SQLSRV_PARAM_IN)
);
$stmt = sqlsrv_prepare($db, $sql, $procedure_params);
if ($stmt === false) {
echo "Die error <br>";
die( print_r( sqlsrv_errors(), true));
}
if (sqlsrv_execute($stmt) === false) {
echo "Die error <br>";
die( print_r( sqlsrv_errors(), true));
}
echo "<br><h3>Success</h3><br>";
$data = array();
do {
while ($row = sqlsrv_fetch_array($stmt)) {
$data[] = $row;
}
} while (sqlsrv_next_result($stmt));
return $data;
}
?>
推荐阅读
- java - JCEF 函数仅从第二次调用开始起作用(Java Chromium Embedded Framework)
- vue.js - Jest 在 Vue/Vuex 项目中无法从窗口对象中找到模块
- javascript - 比较两个对象并使用 react 从数组中找到匹配的对象
- apache-kafka - macOS 上的 node-rdkafka:错误:配置属性“security.protocol”的值“sasl_ssl”无效
- security - 如何在 Windows 机器上使用 oAuth 进行 Kafka 安全设置 SASL_SSL?
- .net - 内存未释放 - MFC 应用程序中使用的 ActiveX 控件 (.NET/C#)
- laravel - 安装 php artisan ui bootstrap --auth 的 ErrorException
- postgresql - Spring-boot vs Postgres vs Cockroach -> 快速路径函数 lo_creat 未知
- python - 有没有办法读取 exe 文件的内容并将其写入 Tkinter Python 中的标签?
- html - 如何使用 VSCode Prettier 防止每个 html 元素结束标记换行?