我正在尝试从存储在远程MSSQL服务器上的过程中提取数据。PHP文档在sqlsrv_fetch($stmt)中说,$stmt指的是sqlsrv_query()或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()期望参数1是资源,布尔给定。
如果我使用的是sqlsrv_query()而不是sqlsrv_execute/prepare,那么sqlsrv_query()可以正常工作。可能的原因是sqlsrv_query()返回混合输出而不是布尔值。
有人能帮忙使用sqlsrv_fetch和execute。
发布于 2015-07-10 12:37:39
sqlsrv_execute返回指示成功或失败的布尔值。
如果对sqlsrv_prepare的调用成功,它将返回一个语句资源。因此,您只需将$abc作为sqlsrv_fetch和sqlsrv_get_field的参数传递即可。
if (sqlsrv_fetch($abc)){
$id = sqlsrv_get_field($abc, 0);
echo $id;
}发布于 2015-07-10 12:46:09
你对原因的见解是正确的。检查执行和每个函数的文档。
sqlsrv_execute返回true或false (布尔值)。这不是fetch作为输入所期望的。
一旦您不需要在每个函数上匹配预期参数的类型,您就可以更容易地处理任何类型的代码。
在开发环境中,在赋值之后尝试使用
var_dump($abcd);来查看它的值。
https://stackoverflow.com/questions/31340422
复制相似问题