2013-07-29 43 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分别放在开始和结尾。