【问题标题】:SQLSRV call a stored procedure in SQL serverSQLSRV 调用 SQL Server 中的存储过程
【发布时间】:2015-01-09 15:39:17
【问题描述】:

我对此完全陌生,只是因为老板的要求。所以我有一些问题想问。

这是我在 SQL 中调用 SP 时的结果

下面是在php中调用SP的代码

$ma_dvcs = 'OL';
$ngay = '01/2/2015';
$ma_kho = 'BPOL01';
$ma_nhvt = '';
$ma_vt = '24110012A2140850';
$kieu = '1';
$query = "{call Tondaulist (@p_Ma_Dvcs_List = ?,@p_Ngay = ?,@p_Ma_Kho = ?,@p_Ma_Nh_Vt = ?,@p_Ma_Vt = ?,@p_Kieu = ?)}";

$params = array(
                array(&$ma_dvcs, SQLSRV_PARAM_IN),
                array(&$ngay, SQLSRV_PARAM_IN),
                array(&$ma_kho, SQLSRV_PARAM_IN),
                array(&$ma_nhvt, SQLSRV_PARAM_IN),
                array(&$ma_vt, SQLSRV_PARAM_IN),
                array(&$kieu, SQLSRV_PARAM_IN)
                );

$smtp = sqlsrv_prepare($conn, $query, $params);

if( $smtp === false )
{
     echo "Error in executing statement 3.\n";
     die( print_r( sqlsrv_errors(), true));
}
$rows = sqlsrv_execute($smtp);
var_dump($rows);die;
$arr[] = sqlsrv_fetch_array($rows,SQLSRV_FETCH_ASSOC);

SQLSRV exec var_dump 返回 true,但我无法获取任何内容,并且一直报错:

The active result for the query contains no fields

或者

sqlsrv_fetch_array() expects parameter 1 to be resource, boolean given

所以我想知道 SP 是否像 php 中的函数一样工作?如果是,它可以返回一个数组还是只返回布尔值以及如何获取该数组?

提前致谢

【问题讨论】:

    标签: php sql-server stored-procedures


    【解决方案1】:

    尝试将您的查询更改为此

    $query = "EXEC Tondaulist @p_Ma_Dvcs_List = ?,@p_Ngay = ?,@p_Ma_Kho = ?,@p_Ma_Nh_Vt = ?,@p_Ma_Vt = ?,@p_Kieu = ?";
    

    这不会返回“数组” SQL 不支持数组,但会返回结果集 您还需要将调用 sqlsrv_execute 更改为 sqlsrv_query

    这里有一个循环遍历 SQL 结果集的示例PHP MSSQL - How To Loop through Returning Rows?

    希望有帮助

    【讨论】:

    • 感谢您的回复,但我怎样才能得到该结果集并打印出来
    • 它不断返回:查询的活动结果不包含任何字段。很奇怪,好像它只是返回布尔值。
    • 从查询选择或总和中获取,我运行没有任何问题,只是 SP,我无法从中获取任何东西。
    • 我不太了解 PHP,但是根据文档,sqlsrv_execute 返回一个 bool sqlsrv_execute 而不是数组
    • 遗憾的是我没有SP代码,老板给我已经有它的db。
    【解决方案2】:

    您需要更改代码,如下所述。 使用 stmp 作为方法 sqlsrv_fetch_array 的参数。

    if(sqlsrv_execute($smtp)){
         print "success";
        while($row = sqlsrv_fetch_array($smtp)){
            print_r($row);
            print "<br />";
        }
    }else{
        print_r( sqlsrv_errors());
    }
    

    如果您仍然无法做到这一点,请告诉我您在使用此代码时遇到了什么问题。

    【讨论】:

      猜你喜欢
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      • 2013-09-18
      • 2015-05-08
      • 2021-05-26
      • 1970-01-01
      • 2012-02-10
      相关资源
      最近更新 更多