Мы разработали наше приложение в CakePHP, работающем с MYSQL, и это работает нормально. Версия PHP - 5.4.16, Apache 2.4.4, последняя версия XAMP. Версия CakePHP: 2.3.0Проблема в cakephp при выполнении некоторой хранимой процедуры MSSQL
У нас уже есть аналогичная база данных в MSSQL. Теперь мы также хотим запустить наше приложение с этим MSSQL.
Для этого мы используем php_pdo_sqlsrv_54_ts.dll и php_sqlsrv_54_ts.dll для драйвера MSSQL. Его сервер sql 2005.
Проблема в том, что когда я запускаю определенные хранимые процедуры сервера sql, cakephp ничего не запускает. Я вижу в профилировщике SQL синтаксис вызова хранимой процедуры, и все параметры верны. Я также вижу в профилировщике, что этот хранимый proc работает на сервере SQL совершенно нормально. Но трюк ничего не показывает.
Соответствующие подпрограммы 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
Снова, если я удаляю среднюю часть, тогда она работает.
Остальные хранимые процедуры работают абсолютно нормально.
Любая помощь будет высоко оценена.
Приветствие