1

ストアドプロシージャを使用してデータベースからいくつかのデータをクエリしようとしていますが、フィールドごとに2回結果を取得しています。

ストアドプロシージャは次のようになります(作成コード)。

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に設定されたレコードが1つだけあります。すべてのデータは正しいので、2回取得しているだけです。

私はここで何か間違ったことをしていますか?

それは正常な動作であり、私は単に初心者が多すぎて知ることができませんか?

4

2 に答える 2

1

fetchTypeを改訂します:

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

ドキュメントの引用:

返す配列のタイプを指定する事前定義された定数。可能な値は、SQLSRV_FETCH_ASSOC、SQLSRV_FETCH_NUMERIC、およびSQLSRV_FETCH_BOTH(デフォルト)です。

于 2012-09-30T16:15:52.363 に答える
0

ここで説明されているようにコードを書き直してみてください:http://php.net/manual/en/function.sqlsrv-fetch-array.php

于 2012-09-30T16:13:43.953 に答える