sql-server - sqlsrv_execute 返回游标我无法从我的方法返回
问题描述
我们最近将 PHP 版本从 5 升级到了 7,因此我不得不更改用于访问我们的 MS SQL 数据库的类。
我开始使用 sqlsrv 并且我在一个类中有一个方法来执行存储过程,它几乎可以做到这一点
<?php
$stmt = sqlsrv_prepare($db, $sql, $procedure_params);
if (!sqlsrv_execute($stmt)) {
if( ($errors = sqlsrv_errors() ) != null)
{
foreach( $errors as $error)
{
echo "SQLSTATE: ".$error[ 'SQLSTATE']."\n";
echo "code: ".$error[ 'code']."\n";
echo "message: ".$error[ 'message']."\n";
die();
}
}
}
// (1) This works, I get all the rows with data, etc...
while($row = sqlsrv_fetch_array($stmt)){
print_r($row);
}
// (2) Returning the cursos won't work, I cannot fetch it when I return it as a result
return $stmt;
?>
执行存储过程后,我会得到结果,并且可以毫无问题地获取它 (1)。但是,如果我作为我的方法/函数的结果返回光标,当我因为调用该方法而得到光标时,我无法获取它,就像它是空的一样。(2)
有任何想法吗?如果这是一个愚蠢的问题,我很抱歉,但我一直在谷歌搜索这个问题,我看不到任何谈论类似问题的帖子。
谢谢!
解决方案
首先,为什么要返回 SQL 资源?如果您这样做,您将很难关闭连接,因为您需要执行sqlsrv_free_stmt( $stmt); 在您要传回的函数中。
其次,我不是 PHP 专家,但我相信您使用的是sqlsrv_execute,它主要用于带有插入、更新和删除等参数的一次性执行。如果要返回包含行的游标,则需要使用sqlsrv_query。
推荐阅读
- android - 无法匹配父自定义对话框的宽度
- excel - 根据单元格值从枢轴复制范围并粘贴到另一个工作表中 n 次
- python - 停止结束程序?
- django - Django-Ajax 传递多个参数
- powershell - Powershell等到文件下载后继续脚本
- unity3d - 命名空间“UnityEngine”中不存在“UI”
- node.js - Zoho 订阅验证 webhook 签名 NodeJS
- c# - 在 Microsoft Graph API C# 中,无法获取部门名称、经理名称并仅获得有限的用户响应
- stm32 - 在stm32上实现LIN协议
- reactjs - 嵌套对象的 promise.then() 中未定义响应