Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP函数返回MSSQL查询结果时出现问题_Php_Sql Server - Fatal编程技术网

从PHP函数返回MSSQL查询结果时出现问题

从PHP函数返回MSSQL查询结果时出现问题,php,sql-server,Php,Sql Server,在尝试返回正在工作的sqlsrv_查询函数调用的结果时,我遇到了一个奇怪的错误 我已设立: function test($someinput, &$someoutput) { //set up $dbc and $dbcOptions //generate tsql $params = array(); $stmt = sqlsrv_query($dbc, $tsql, $params, $dbcOptions); $someoutput = $stmt; ret

在尝试返回正在工作的sqlsrv_查询函数调用的结果时,我遇到了一个奇怪的错误

我已设立:

function test($someinput, &$someoutput)
{
  //set up $dbc and $dbcOptions
  //generate tsql
  $params = array();
  $stmt = sqlsrv_query($dbc, $tsql, $params, $dbcOptions);
  $someoutput = $stmt;
  return $stmt;
}

$outputvar;
$results = test($inputvar, $outputvar);

//---ERROR being thrown here
$rows = sqlsrv_num_rows($results);
//$rows2 = sqlsrv_num_rows($outputvar);
//---ERROR being thrown here
在这两行中(无论我使用哪一行),我在
php errors.log
文件中都得到了一个错误

PHP Warning:  sqlsrv_num_rows(): 2 is not a valid ss_sqlsrv_stmt resource in
E:\inetpub\wwwroot\directory\searchtest.php on line 58
哪个
searchtest.php
是我正在处理的文件,第58行是生成代码时出错的地方


为什么我不能从这样的函数中传递查询结果?

在我看来,您的SQL语句中有一个错误。 您可以在以下操作之后调用
sqlsrv\u errors

$stmt=sqlsrv_查询($dbc、$tsql、$params、$dbcopions)

if($stmt==false){
如果($errors=sqlsrv_errors())!=null){
foreach($errors作为$error){
回显“SQLSTATE:”.$error['SQLSTATE'].“
”; 回显“代码:.”错误['code']。“
”; 回显“消息:.”错误['message']。“
”; } } }

然后,您应该找到错误。

根据OP希望标记为已回答,请对回答进行注释(稍加修改):

这听起来是个问题


尝试将
$dbc
传递给您的函数(最佳),或(不推荐)使其成为
全局$dbc在您的函数中

返回$stmt缺少变量symbol@Mihai谢谢,我已经更正了,但是代码的行为还是一样的。可能是范围问题。尝试将
$dbc
传递给您的函数,或者(不推荐)使其成为
全局$dbc在你的函数中。@Fred ii-这似乎已经修复了它。把这个写下来作为答案,我会投赞成票,并把它标为正确。谢谢你的帮助!好的,不用谢Joel。我可以用你认为最好的方法传递
$dbc
@JoelTrauger,太好了Joel,更好了<代码>全球
被认为是“邪恶的”,他们这么说。它有它的优点和缺点。
if( $stmt === false ) {
    if( ($errors = sqlsrv_errors() ) != null) {
        foreach( $errors as $error ) {
            echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />";
            echo "code: ".$error[ 'code']."<br />";
            echo "message: ".$error[ 'message']."<br />";
        }
    }
}