这两天很郁闷,老是为PHP为oracle语句绑定变量时出现问题,下面做为题描述:
oci_bind_by_name($stmt,”:ip”,$ip,32);
oci_bind_by_name($stmt,”:username”,$username,32);
oci_bind_by_name($stmt,”:telephone”,$telephone,32);
oci_bind_by_name($stmt,”:idname”,$idname,32);
$name=array(“:ip”=>$ip,”:username”=>$username,”:telephone”=>$telephone,”:idname”=>$idname);
foreach ($name as $k=>$v) {
oci_bind_by_name($stmt,$k,$v,32);
}
第一种方式正常绑定;第二种方式,最后执行结果四个变量都绑定了$idname的值,为什么两种方法出现的结果不同呢?原因在于oci_bind_by_name函数没认识清楚,且看官方手册:
bool oci_bind_by_name ( resource stmt, string ph_name, mixed &variable [, int maxlength [, int type]] )
第三个变量,传递的是变量的引用,所以第一次循环,:ip绑定的是$ip的引用,即$ip的地址假设为223,第二次循环,$ip变量的地址被$username占用,所以:username也绑定了地址223,:telephone和:idname都如此,最后一次循环,内存地址223位置上存储的是$idname变量的值,所以当执行oci_execute($stmt)时给四个变量都绑定了$idname的值。哈哈,了解了吧