2012-09-30 212 views
1

我試圖使用存儲過程來查詢我的數據庫中的一些數據,但我得到的結果兩次爲每個字段。存儲過程返回結果兩次

存儲過程是這樣的(創建代碼):

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爲se t到2.所有的數據都是正確的,我只是簡單地把它兩次。

我在這裏做錯了什麼?

這是一個正常的行爲,我只是太多的新手知道嗎?

回答

1

修訂fetchType

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

引用DOC:

的預定義常數指定數組的類型返回。可能的 值爲SQLSRV_FETCH_ASSOC,SQLSRV_FETCH_NUMERIC和 SQLSRV_FETCH_BOTH(默認值)。

+0

Soo ..如果我理解正確,SQLSRV_FETCH_BOTH(這是默認值)返回結果集兩次,一個用於NUMERIC,一個用於ASSOC? –

+0

看來是的。如果您只按位置或僅按鍵訪問值,則這不是問題。這不是你的情況,你做一個'全面掃描'行。 – danihp

+0

所以看起來。謝謝你們倆。 –