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.

0 ответов

Другие вопросы по тегам