我刚接触PHP,我有6个Oracle查询,所有这些查询都需要在执行之前将相同的2个变量绑定到它们。我想拥有一个可以传递查询名称和SQL的函数,而不是手动执行6条oci_query
,oci_bind
和oci_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。