Доброе время суток.
Отсутпление: База спроектирована на MS SQL 2012, PHP 5.4 на IIS 8... Для обращения к БД использую sqlsrv...
Проблема в следующем... есть процедура тело примерно следующее
... PROCEDURE [<Schema>].[<Name>] @Param1 XML, @Param2 VARCHAR(100), @Param3 INT, @Param4 OUTPUT WITH EXECUTE AS OWNER
AS
SET XACT_ABORT ON
BEGIN TRANSACTION
BEGIN TRY
< SELECT'ы и INSERTы вставка примерно в 9 таблиц>
END TRY
BEGIN CATCH
-- Откатываю транзакцию сам
ROLLBACK TRANSACTION
SET Param4 = <Some value of integer>
RETURN
END CATCH
IF(XACT_STATE() = 1) BEGIN
COMMIT TRANSACTION
SET Param4 = <Some value of Integer>
END
ELSE BEGIN
ROLLBACK TRANSACTION
SET Param4 = <Some other value of integer>
END
RETURN
PHP код следующий:
...
#$connectInfo - Пользователь, Пароль и БД
$connect = sqlsrv_connect($server, $connectInfo);
...
$tsql = "{call [<schema>].[<Procedure>](?, ?, ?, ?)}"
...
$param4 = 0;
...
$params = array(
array($xml, SQLSRV_PARAM_IN),
array($param2, SQLSRV_PARAM_IN),
array($param3, SQLSRV_PARAM_IN),
array($param4, SQLSRV_PARAM_OUT) #писал еще $param4 , SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_INT
);
$stmt = sqlsrv_query($connect, $tsql, $params);
echo $param4;
...
Происходит следующее, процедура отрабатывает нормально, запись в таблицы делается, но $param4 как был 0, так им и остается... а должен поменяться... процедуру отлаживал в tsql, работает как надо. Менял пыхыпы код на:
...
$tsql = "EXEC [<schema>].[<Procedure>] ?, ?, ?, ?";
...
$params = array(
array(&$xml, SQLSRV_PARAM_IN),
array(&$param2, SQLSRV_PARAM_IN),
array(&$param3, SQLSRV_PARAM_IN),
array(&$param4, SQLSRV_PARAM_OUT)
);
...
Результат тот же...
sqlsrv_next_result($stmt);
использовал, что есть он, что его нет, разницы не вижу...
Подскажите в чем мб запара, уже голову сломал... Завтра буду пробовать mssql_connect и КО...