Привет! Есть на MSSQL 2005 хранимая процедура [dbo].[PaymentAddFromCSV] помогите вызвать через PHP. За SQL прошу ничего не говорить. Какая есть, такую и вызываю [sql]USE [cti-test] GO /****** Object: StoredProcedure [dbo].[PaymentAddfromCSV] Script Date: 07/22/2009 08:54:25 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER procedure [dbo].[PaymentAddfromCSV] @AccountNumber BCOMMENT, -- номер лицевого счета (Varchar 255) @PaymentSumm money, -- сумма платежа @PaymentDate datetime, -- дата, время платежа (необязательный) @PSID BCOMMENT, -- наименование платежной системы (Varchar 255) -- @AuthResult int out, --возвращаемый параметр - результат выполнения: -- @AuthResult = 5 ACCOUNT_OTHER_FATAL -- @AuthResult = 2 ACCOUNT_NOT_EXISTS -- @AuthResult = 0 PAYMENT_OK @CurrencyCode int, -- код валюты @txn_id varchar(255) = null, @ExternalPaymentID varchar(255) = null, @PaymentNumber int = null, --номер платежа @PaymentType int = 2 --тип платежа, по умолчанию 2 - платежное поручение as begin declare @pd_id BIDENT, @PayerID BIDENT, @Number int, @DisplayCurrency BIDENT, @SubscriberID BIDENT, @DestAccID BIDENT, @DestDescription BCOMMENT, @ID BIDENT, @CurRate float, @AccountCurrencyID BIDENT, @AuthResult int select @AuthResult = 5 --ACCOUNT_OTHER_FATAL begin tran if @PaymentNumber is null begin select @Number = isnull(max(Number), 0) + 1 from FinanceDocument where FinanceDocumentTypeID = 2 end else begin Select @Number = @PaymentNumber end --Временно предполагаем что все платежи рублевые select top 1 @DisplayCurrency = ID from Currency where Code = 'RUR' order by ID if ( select top 1 count(1) from Account a where a.Number = @AccountNumber and a.AccType in (4, 5)) > 1 goto Error select @SubscriberID = a.SubscriberID, @DestAccID = a.ID, @AccountCurrencyID = ga.CurrencyID from Account a, GroupAccount ga where a.ID = ga.ID and a.AccType in (4, 5) and a.Number = @AccountNumber if @DestAccID is null begin select @AuthResult = 2 --ACCOUNT_NOT_EXISTS goto error end select @DestDescription = 'Платеж через ' + @PSID exec GetTwoCurrencyRate @Rate = @CurRate out, @FromCurrencyID = @DisplayCurrency, @ToCurrencyID = @AccountCurrencyID if (@@error!=0) or (0=1) goto Error select @PaymentSumm = @PaymentSumm * @CurRate exec PaymentDocumentAdd @ID = @pd_id out, @Number = @Number, @DocumentDate = @PaymentDate, @Amount = @PaymentSumm, @CurrencyID = @DisplayCurrency, @SubscriberID = @SubscriberID, @PaymentDocumentTypeID = @PaymentType, @NotificationDocumentTypeID = 3, --Уведомление платежной системы @ConfirmationStateID = 2 --Подтверждён if (@@error!=0) or (0=1) goto Error exec PaymentEntryAdd @ID = @ID out, @Qty = @PaymentSumm, @EntryDate = @PaymentDate, @DocName = '-', @PaymentTypeID = 3, -- payment transfer @AccountID = @DestAccID, @Description = @DestDescription, @LegalInfoID = null, @PaymentDocumentID = @pd_id if (@@error!=0) or (0=1) goto Error commit select @AuthResult = 0 --PAYMENT_OK select @AuthResult return Error: select @AuthResult rollback tran end[/sql] Я пробовал вызывать эту процедуру так, но ничего не получилось PHP: <?php $db= new PDO("odbc:Driver={SQL Native Client};Server=217.114.191.230;Database=cti-test; Uid=username;Pwd=password;"); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $st= $db->prepare(" exec [dbo].[PaymentAddFromCSV] @AccountNumber= :AccountNumber, @PaymentSumm= :PaymentSumm, @PaymentDate= :PaymentDate, @PSID= '1С', @CurrencyCode = 1, @txn_id= null, @ExternalPaymentID = null, @PaymentNumber = :PaymentNumber, @PaymentType = :PaymentType "); $st->bindValue(":AccountNumber", $argv[1], PDO::PARAM_STR); $st->bindValue(":PaymentSumm", $argv[2], PDO::PARAM_STR); $st->bindValue(":PaymentDate", ereg_replace("(.{2})\.(.{2})\.(.{2})", '\\2.\\1.\\3 12:00:00', $argv[3]), PDO::PARAM_STR); $st->bindValue(":PaymentNumber", $argv[6], PDO::PARAM_INT); $st->bindValue(":PaymentType", $argv[7], PDO::PARAM_INT); $st->execute(); echo $st->fetch(); Выдает ошибку на команде $st->execute() типа А если запустить в менеджере MSSQL, то такой код проходит. Причем возвращает одну строчку с одной колонкой без имени, которую хотелось бы получить внутрь PHP.
И почему в SQLServer параметры внутрь процедуры передаются не в скобках, а просто через запятую? Это нормально?
И как это хранимая процедура возвращает значение, например в строке 106 или в строке 109? Процедура же вроде не умеет возвращать значение, как функция.