在这里,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标准版。