Intereting Posts
PHP Set и чтение строки cookie Включение файлового_компьютера на общем сервере iOS7 – квитанции, не проверяющие в песочнице – ошибка 21002 (java.lang.IllegalArgumentException) call_user_func в контексте класса (с указанным значением $) ZF2: Как получить Zend \ Navigation внутри настраиваемого маршрута? Дополнительная электронная почта от Cron Daemon при запуске сценария списка электронной почты Получение наивысшего числа из массива Symfony 2 / Doctrine 2: два объекта для одной таблицы, используйте один в пользу другого PHPUnit «Mocked method не существует» при использовании $ mock-> expects ($ this-> at (…)) Доктрины и бизнес-логика в приложении Symfony Является ли mysqli_real_escape_string безопасным? image / pjpeg и image / jpeg Разделить текстовый файл в PHP WordPress / Woocommerce: как получить определенную дочернюю категорию по «id» из идентификатора родительской категории PHP: «На сайте слишком много переадресаций» при использовании сеансов php со временем

Почему PHP OCI8 / Oracle oci_bind_array_by_name не работает для меня?

Я пытаюсь связать переменную php с массивом pl / sql. Процедура pl / sql отлично работает, когда я выполняю ее вручную и устанавливаю привязку, поэтому я знаю, что это не проблема. Это проблема oci_bind_array_by_name .

Я получаю следующее сообщение об ошибке для строки в коде PHP ниже, где я вызываю функцию oci_bind_array_by_name :

 Warning: oci_bind_array_by_name() [function.oci-bind-array-by-name]: You must provide max length value for empty arrays 

Я смущен, потому что на самом деле я предоставляю максимальную длину (250) в вызове функции в документации:

http://php.net/manual/en/function.oci-bind-array-by-name.php Я использую PHP 5.1.6

Вот соответствующий код PHP:

 $SQL = "BEGIN MYPKG.PROCESS_USERS(:USER_ID_ARRAY); END;"; $conn = self::getConnection(); $stmt = OCIParse($conn, $SQL); $userIdArray= array(); /*I've also tried not initializing the OUT array (same error) If I put some dummy value into the $userIdArray the procedure will run fine, but the results afterward will contain only that dummy value and not the output of the procedure*/ oci_bind_array_by_name($stmt,'USER_ID_ARRAY', $userIdArray, 250, -1, SQLT_VCS); 

У меня есть тип массива, определенный в пакете:

 TYPE USER_ID_ARRAY IS TABLE OF VARCHAR2(250) INDEX BY BINARY_INTEGER; The PROCESS_USERS function in an abbreviated form: PROCEDURE PROCESS_USERS(p_userIdArray out USER_ID_ARRAY) AS --Code here which processes all waiting users and returns their IDs in p_userIdArray END PROCESS USERS; 

Solutions Collecting From Web of "Почему PHP OCI8 / Oracle oci_bind_array_by_name не работает для меня?"

И я чувствую себя дураком, потому что я недостаточно читал API. По-видимому, я указывал max_table_length, но сообщение об ошибке ссылалось на max_item_length, который я оставил как -1 … но это нет-нет, так как я привязываю параметр OUT вместо IN.

Так изменилось связывание, и теперь он работает:

 oci_bind_array_by_name($stmt,'USER_ID_ARRAY', $userIdArray, 250, 250, SQLT_VCS);