PHP oci_bind_by_name - пустой исходящий параметр (длиной 65535) - PullRequest
0 голосов
/ 11 февраля 2019

Я не смог найти ответы на эту проблему здесь, в документации по 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.

Мой вопрос: почему выходной параметр не является нулевым значением или пустой строкой указанной максимальной длины (100)?Почему 65535?Есть ли способ изменить это?

Я запустил это на PHP 7.1.25 и PHP 5.6.30.Версия Oracle - 12c Standard Edition.

...