PHP oci_bind_by_name-空的出站参数(长度为65535)

时间:2019-02-11 14:31:22

标签: php oracle plsql oci8

在这里,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 是包含绑定变量的数组。 statement (语句)是一条Oracle语句,它是包含以下PL / SQL代码(测试目的)的sql查询上oci_parse的结果:

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标准版。

0 个答案:

没有答案