2009-10-19 1 views
0

У меня почти есть базовый набор вспомогательных функций для доступа к ADO через PHP. У меня возникла проблема при попытке выполнить хранимую процедуру с помощью опции adExecuteNoRecords, установленной для $ cmd-> Execute (,, adExecuteNoRecords);PHP, вызывающий метод объекта ADO, который имеет необязательные параметры

Я попытался неопределенные для первых двух параметров, новый VARAINT(), новый VARIANT (нуль), новый VARIANT (VT_EMPTY) и т.д ...

я или, наоборот, получали «Не удается передать параметр 1 по ссылке "или com_exception типа Mismatch, и -> Execute (,, adExecuteNoRecords) не передает парсинг PHP.

Я сделал довольно много поиска, но я не нашел ни одного примера того, кто использует это.

Таким образом, при вызове метода COM-объекта, который имеет необязательные параметры, как вы устанавливаете начальный параметр в ничто?

Спасибо.

+0

Замечание: при выполнении хранимой процедуры, даже если у нее нет параметров, вам все равно нужно выполнить $ cmd-> Parameters-> Refresh; – ddowns

ответ

1

Попробуйте пройти $missing = new Variant(VT_ERROR) вместо необязательных параметров.

Btw, в параметрах COM, даже необязательно, все еще есть типы. Если необязательным параметром является BSTR, то опускание его обычно подобно передаче пустой строки. Что может показаться странным, так это то, что значение по умолчанию для необязательного параметра указано в библиотеке типов. То есть необязательный параметр BSTR может иметь значение «abc» по умолчанию. Поэтому вы должны исследовать это до построения вызова в PHP. В вашем конкретном случае Execute имеет 3 необязательных параметра VARIANT без определенных значений по умолчанию, поэтому мы используем VT_ERROR для обозначения отсутствующего параметра VARIANT.