PHP oci查询功能未正确传递名称

时间:2019-10-20 19:00:50

标签: php sql oracle

我刚接触PHP,我有6个Oracle查询,所有这些查询都需要在执行之前将相同的2个变量绑定到它们。我想拥有一个可以传递查询名称和SQL的函数,而不是手动执行6条oci_queryoci_bindoci_execute语句,但是由于某种原因,查询返回了通过函数完成时为0:

function run_query($qname,$querytext) {
    $$qname = oci_parse($GLOBALS['conn'],$querytext);
    oci_bind_by_name($$qname,":dbmonth",$mymonth);
    oci_bind_by_name($$qname,":dbyear",$dbyear);
    oci_execute($$qname);
}
run_query("ncdone","
    select count(*) as totaldone 
    from mytable f 
    where extract(month from f.ts)=:dbmonth 
    and extract(year from f.ts)=:dbyear 
    and jobstat like '%Finished%'
");

<td><?php while (oci_fetch($ncdone)) {echo oci_result($ncdone,'TOTALDONE');} ?></td>

该函数不一定与函数调用位于同一代码块中,因此我将范围定为$conn,因为如果不依赖于函数在代码中的位置,则会出错。在函数内部声明GLOBAL $$qname;无效。我应该不使用可变变量吗?我引用不正确吗?或者这是函数所在位置的副作用?如果有帮助,则为PHP 5.6。

0 个答案:

没有答案