有一个问题,我没有从存储过程收到结果,我使用 php 和 mssql 数据库。
我可以在 sql 服务器探查器中看到该查询,当我在 sql Server 管理工具中运行该查询时,该查询将正常工作。
当我在 php 中使用查询时,出现以下错误
Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -28 [code] => -28 [2] => The active result for the query contains no fields. [message] => The active result for the query contains no fields. ))
这是我的 php 代码 'if ($this->conn) {
$session_id = "9999912C8D74";
$patient_id = "9999912C8D74";
$days = 7;
$params = array (
array (
$session_id,
SQLSRV_PARAM_IN
),
array (
$patient_id,
SQLSRV_PARAM_IN
),
array (
$days,
SQLSRV_PARAM_IN
)
);
$tsql_callSP = "exec dbo.STOREDPROCEDURECALL @SessId=?, @PatId=?, @days=?";
$stmt3 = sqlsrv_query ( $this->conn, $tsql_callSP, $params );
if ($stmt3 === false)
{
echo "Error in executing statement 3.n";
die ( print_r ( sqlsrv_errors (), true ) );
}
if( sqlsrv_fetch( $stmt3 ) === false)
{
die( print_r( sqlsrv_errors(), true));
}
$name = sqlsrv_get_field( $stmt3, 1);
echo "$name: ";
$comment = sqlsrv_get_field( $stmt3, 2);
echo $comment;
while ( $obj = sqlsrv_fetch_object ( $stmt3 ) ) {
var_dump ( $obj );
echo $obj->BGUM . "<br>";
}
}
我已经在堆栈溢出上尝试了大量的解决方案,没有任何效果:-(,任何建议将不胜感激。谢谢。
毕竟,答案是在 SP 中添加SET NOCOUNT ON;
。
删除此部分:
if( sqlsrv_fetch( $stmt3 ) === false)
{
die( print_r( sqlsrv_errors(), true));
}
$name = sqlsrv_get_field( $stmt3, 1);
echo "$name: ";
$comment = sqlsrv_get_field( $stmt3, 2);
echo $comment;
while ( $obj = sqlsrv_fetch_object ( $stmt3 ) ) {
var_dump ( $obj );
echo $obj->BGUM . "<br>";
}
并在sqlsrv_fetch_array
的帮助下像这样更改它(阅读此处):
while ($obj = sqlsrv_fetch_array($stmt3, SQLSRV_FETCH_NUMERIC)) {
echo $obj[0]." ".$obj[1]."<br>"; //I don't know how many columns your SP return
}
sqlsrv_free_stmt( $stmt3);
或者您可以使用列名获取:
while ($obj = sqlsrv_fetch_array($stmt3, SQLSRV_FETCH_ASSOC)) {
echo $obj['name']." ".$obj['comment']."<br>";
}
sqlsrv_free_stmt( $stmt3);