none
PHP + SQL Server RRS feed

  • Вопрос

  • Доброе время суток.

    Отсутпление: База спроектирована на 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 и КО...


    10 декабря 2015 г. 7:17

Ответы