2013-07-29 41 views
0

我們已經在CakePHP中運行MYSQL並開發了我們的應用程序,並且工作正常。 PHP版本是5.4.16,Apache 2.4.4,最新的XAMP。 CakePHP版本:2.3.0在執行某些MSSQL存儲過程時cakephp中的問題

我們在MSSQL中也有類似的數據庫。現在我們也想用這個MSSQL來運行我們的應用程序。

我們對此使用了php_pdo_sqlsrv_54_ts.dll和php_sqlsrv_54_ts.dll作爲MSSQL驅動程序。它的SQL服務器2005年。

問題是,當我運行某些SQL Server存儲過程時,cakephp什麼也不運行。我可以在SQL分析器中看到存儲過程調用的語法沒問題,所有參數都是正確的。我還可以在Profiler中看到這個存儲過程在SQL服務器上運行得非常好。但是cakephp沒有顯示任何東西。

對應的MySql例程工作正常,cakephp返回正確的數據。

這是PHP代碼,其次是存儲過程。

$getCoulmnsInfo =$this->Maintable->query('exec GetColumns_Information 0');   

    print_r($getCoulmnsInfo); // This prints nothing, $getCoulmnsInfo is empty 

相應的SQL服務器存儲過程是

ALTER PROCEDURE [dbo].[GetColumns_Information] 
    @GroupOverride midsys_boolean AS 
    IF (@GroupOverride = 1) 
    BEGIN SELECT columns_id, columns_columntypesid, columns_columnname,  
    columns_usercolumnname, 1 FROM ColumnsTable ORDER BY columns_id RETURN END 

    SELECT columns_id, columns_columntypesid, columns_columnname,   
    columns_usercolumnname, columns_columnsettings 
    FROM ColumnsTable 
    ORDER BY columns_id 

現在,如果修改上面給下面然後正常工作,並返回正確的結果。基本上我刪除了中間的幾行。

ALTER PROCEDURE [dbo].[GetColumns_Information] 
    @GroupOverride midsys_boolean AS 

    SELECT columns_id, columns_columntypesid, columns_columnname,   
    columns_usercolumnname, columns_columnsettings 
    FROM ColumnsTable 
    ORDER BY columns_id 

存儲過程的另一個例子,它不工作。

ALTER PROCEDURE [dbo].[MainStatusesFlow_Next] 
    @MainID int AS 
    DECLARE @MainStatusesID int 

    SELECT @MainStatusesID = main_mainstatusesid 
    FROM MainTable 
    WHERE main_id = @MainID 

    IF EXISTS (SELECT * FROM MainStatusesTable MainStatuses INNER JOIN   
    MainStatusesFlowTable MainStatusesFlow ON MainStatuses.mainstatuses_id =   
    MainStatusesFlow.mainstatusesflow_nextstatusid WHERE   
    MainStatusesFlow.mainstatusesflow_statusid = 10) 
    BEGIN SELECT MainStatuses.mainstatuses_name FROM MainStatusesTable MainStatuses   
    INNER JOIN MainStatusesFlowTable MainStatusesFlow ON MainStatuses.mainstatuses_id =   
    MainStatusesFlow.mainstatusesflow_nextstatusid WHERE   
    MainStatusesFlow.mainstatusesflow_statusid = 10 RETURN END 

    SELECT mainstatuses_name, 1 
    FROM MainStatusesTable 
    WHERE mainstatuses_id = 10 

再次,如果我刪除中間部分,那麼它的作品。

其餘的存儲過程非常好。

任何幫助將不勝感激。

乾杯

回答

0

我覺得你的問題可能都與多個記錄,以及如何驅動程序處理髮送它們(不然怎麼可能會潛在地處理它。)

你能試着改變你儲存的一個PROC對這一

ALTER PROCEDURE [dbo].[GetColumns_Information] 
@GroupOverride midsys_boolean AS 
IF (@GroupOverride = 1) 
BEGIN 
SELECT columns_id, columns_columntypesid, columns_columnname,  
columns_usercolumnname, 1 AS 'columns_columnsettings' 
FROM ColumnsTable 
ORDER BY columns_id 
END 

ELSE 
BEGIN 
SELECT columns_id, columns_columntypesid, columns_columnname,   
columns_usercolumnname, columns_columnsettings 
FROM ColumnsTable 
ORDER BY columns_id 
END 

在這種情況下,可以簡化爲一個記錄

SELECT columns_id, columns_columntypesid, columns_columnname,  
columns_usercolumnname, 
CASE 
WHEN @GroupOverride = 1 THEN 1 
ELSE columns_columnsettings 
END AS 'columns_columnsettings' 
FROM ColumnsTable 
ORDER BY columns_id 

最好的運氣

0

只是簡單的添加在起始:

set nocount on; 

,並在結尾:

set nocount off; 

,它會給你的結果。

它發生在我們使用任何if-else conditions時。

當你遇到存儲過程在sql分析器中給出結果但沒有在cakephp中觸發查詢時顯示任何結果的情況時,分別將nocount on off分別放在開始和結尾。