【问题标题】:Stored Procedure returning result twice存储过程两次返回结果
【发布时间】:2012-09-30 16:01:13
【问题描述】:

我正在尝试使用存储过程从我的数据库中查询一些数据,但我会为每个字段获取两次结果。

存储过程如下(创建代码):

PROCEDURE [dbo].[msp_Query_Information]
@category_id tinyint
AS
BEGIN
        SET NOCOUNT ON;
        SELECT  ,[Name]
                ,[Status_ID]
                ,CONVERT(char(19), [Update_Time], 120)
                ,[Max_Value]
                ,[Current_Value]
        FROM [dbo].[MyTable]
        WHERE [Category_ID] = @category_id
END

我正在使用以下 PHP 调用存储过程(减去错误检查和调试代码):

<?php
    //define db connection
    $serverName = '(local)';
    $connectionInfo = array("Database"=>"MyDatabase");

    //connect to database
    $dbConn = sqlsrv_connect($serverName, $connectionInfo);

    //execute procedure to query servers status
    $spSql = "{call [dbo].[msp_Query_Information](?)}";
    $id = 2;
    $params = array($id);

    $result = sqlsrv_query($dbConn, $spSql, $params);

    //show results
    while ($row = sqlsrv_fetch_array($result))
    {
        foreach ($row as $key => $value) 
        {
            echo $value.'<br/>';
        }
    }

    //close connection to database
    $closeConn = sqlsrv_close($dbConn);

    echo '<br/>Database connection closed.';
?>

这些是我得到的结果:

TEST
TEST
2
2
2012-09-30 16:03:00
2012-09-30 16:03:00
200
200
0
0

MyTable 中只有一条记录,Category_ID 设置为 2。所有数据都是正确的,我只是获取了两次。

我在这里做错了吗?

这是正常行为吗?我只是个新手,不知道吗?

【问题讨论】:

    标签: php sql-server stored-procedures


    【解决方案1】:

    修改fetchType

    while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC ))
    

    引用文档:

    一个预定义的常量,指定要返回的数组类型。可能的 值为 SQLSRV_FETCH_ASSOC、SQLSRV_FETCH_NUMERIC 和 SQLSRV_FETCH_BOTH(默认)。

    【讨论】:

    • Soo.. 如果我理解正确,SQLSRV_FETCH_BOTH(这是默认值)返回结果集两次,一次用于 NUMERIC,一次用于 ASSOC?
    • 看来是的。如果您仅按位置或仅按键访问值,这不是问题。这不是你的情况,你做一个“全扫描”行。
    【解决方案2】:

    尝试按照此处所述重写您的代码:http://php.net/manual/en/function.sqlsrv-fetch-array.php

    【讨论】:

      猜你喜欢
      • 2021-03-22
      • 2015-06-03
      • 2013-06-21
      • 2023-04-05
      • 2023-04-06
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多