可能重复:
Is it possible to pass parameters by reference using call_user_func_array()?
下面的代码行在PHP5.1中工作,但在PHP5.3中不起作用。
$input = array('ss','john','programmer');
call_user_func_array(array($mysqli_stmt, 'bind_param'), $input);在PHP5.3中,我收到以下警告消息:
/var/www/startmission/em/class/cls.data_access_object.php警告:参数2到mysqli_stmt::bind_param()应该是引用,在第785行的
中给出的值
我将代码更改为以下代码,它起了作用:
$a = 'johnl';
$b = 'programmer';
$mysqli_stmt->bind_param('ss',$a,$b);我在php文档中找到了这一点:
在与
()一起使用mysqli_stmt_bind_param()时,必须注意call_user_func_array()。请注意,mysqli_stmt_bind_param()要求通过引用传递参数,而call_user_func_array()可以接受一个可以表示引用或值的变量列表作为参数。
因此,我的问题是,如何复制call_user_func_array + bind_params的功能,以便能够在运行时动态绑定变量?
发布于 2010-09-09 23:26:53
我在 on the PHP manual page of mysqli_stmt::bind_param()的一个用户说明中找到了问题的答案(稍微修改了一下):
I在迁移到php5.3之后,
call_user_func_array和bind_param曾经有问题。
原因是5.3要求数组值作为引用,而5.2则使用实际值(但也使用引用)。因此,我创建了一个辅助函数来帮助我完成以下工作:
函数refValues ($arr ) { $refs =$refs();foreach ($arr as $key => $value) { $refs$key = &$arr$key;}返回$refs;}
并将我以前的功能更改为:
Call_user_func_array(数组($this->stmt,"bind_param"),$this->value);
至:
Call_user_func_array(数组($this->stmt,"bind_param"),refValues($this->refValues));
这样,我的db函数就可以继续在PHP5.2/5.3服务器中工作。
https://stackoverflow.com/questions/3681262
复制相似问题