PHP oci_bind_by_name - пустой исходящий параметр (длиной 65535)
Я не смог найти ответы на эту проблему здесь, в документации по PHP или в Google.
У меня есть следующий фрагмент кода PHP:
if (!empty($bind_vars)) {
$vars = array_keys($bind_vars);
for ($i=0; $i < count($bind_vars); $i++) {
oci_bind_by_name($statement, $vars[$i], $bind_vars[$vars[$i]], 100);
}
}
bind_vars - это массив, содержащий переменные связывания.оператор - это оператор Oracle, результат oci_parse для SQL-запроса, содержащий следующий код PL/SQL (в целях тестирования):
for r_t in c_t loop
if c_p.param = 'TEST1' then
:TEST1 := r_t.val;
else
:TEST2 := r_t.val;
end if;
end loop;
Это приводит к ситуации, когда одна из переменных связывания получает результат, а другая - 65535 пустых строк.
Я нашел это в PHP документах ( oci_bind_by_name):
Вызов связывания сообщает Oracle, какой адрес памяти для чтения данных. Для привязок IN этот адрес должен содержать действительные данные при вызове oci_execute(). Это означает, что связанная переменная должна оставаться в области действия до выполнения. Если этого не произойдет, могут возникнуть непредвиденные результаты или ошибки, такие как "ORA-01460: запрошено невыполненное или необоснованное преобразование". Для привязок OUT одним признаком является отсутствие значения в переменной PHP.
Мой вопрос: почему параметр out не является нулевым значением или пустой строкой указанной максимальной длины (100)? Почему 65535? Есть ли способ изменить это?
Я запускал это как на PHP 7.1.25, так и на PHP 5.6.30. Версия Oracle - 12c Standard Edition.