2015-07-10 87 views
1

我想从存储在远程MSSQL服务器上的过程中提取数据。 PHP documentationsqlsrv_fetch($stmt)中表示,$stmt表示由sqlsrv_query()sqlsrv_execute()返回的资源。sqlsrv_fetch与MS SQL服务器sqlsrv_execute

这里是我的代码片段 - >

$sql = "exec USP_ABC_ABC_REPORT 'Apple','06/01/2014','10/29/2014','H','A'"; 

     $segment ='apple'; 
     $start_date='06/01/2014'; 
     $end_date ='10/29/2014'; 
     $something2 ='H'; 
     $something3 ='A';  

     $abc = sqlsrv_prepare($conn, $sql, array(&$segment, &$start_date, &$end_date, &$something2, &$something3)); 


     if($abcd = sqlsrv_execute($abc)){ 
       if(sqlsrv_fetch($abcd)){ 
        $id = sqlsrv_get_field($abcd, 0); 
        echo $id; 
      } else{ 
        echo "fetch failed"; 
       } 
     } 

该片段显示了一个错误:

sqlsrv_fetch() expects parameter 1 to be resource, boolean given.

sqlsrv_fetch()如果我使用sqlsrv_query(正常工作),而不是sqlsrv_execute /准备。可能的原因是sqlsrv_query()返回混合输出而不是布尔值。

任何人都可以帮助使用sqlsrv_fetch执行。

回答

0

sqlsrv_execute返回指示成功或失败的布尔值。

如果sqlsrv_prepare的调用成功,则返回语句资源。所以,你可以只通过$abcsqlsrv_fetchsqlsrv_get_field参数:

if (sqlsrv_fetch($abc)){ 
    $id = sqlsrv_get_field($abc, 0); 
    echo $id; 
} 
+0

是的我的准备声明工作正常。所以我已经删除了我的execute语句,并使用了sqlsrv_fetch($ abc),正如你所提到的那样。这会显示“提取失败”(上面的代码中的else语句)。这是由于远程服务器中的错误吗?另外,为什么官方的PHP sqlsrv_fetch()帖子没有提及我们可以使用prepare资源作为参数? –

0

你对事业的见解是正确的。检查文档sqlsrv_execute和每个功能。

sqlsrv_execute返回任一,(布尔)。这不是提取期望的输入。

一旦您不需要在每个函数上匹配预期参数类型的需求,您将可以通过任何类型的代码更容易地相处。

while into a develpment environment, try to var_dump($abcd); just after assigning to see its value.

+0

var_dump转储有关变量的信息。我知道这一点。但是由于execute总是返回布尔值,所以我如何更改上面的代码片段。如果我没有正确地关注你,请使用代码片段进行解释。 –

+0

我的意思是sqlsrv_fetch()期待一个资源作为参数,而不是布尔值。因此,不会以这种方式工作。请参阅http://php.net/manual/en/function.sqlsrv-fetch.php,参数是abc,而不是abcd。正如良好的做法,避免使用混淆的var名称。 – alariva

+0

我已将sqlsrv_fetch($ abcd)替换为sqlsrv_fetch($ abc)。这会显示“提取失败”(上面的代码中的else语句)。这是由于远程服务器中的错误吗?我的准备声明工作正常。另外,为什么官方的PHP sqlsrv_fetch()帖子没有提及我们可以使用prepare资源作为参数? –