首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php5.3 -带有mysqli_stmt:bind_params警告的call_user_func_array

php5.3 -带有mysqli_stmt:bind_params警告的call_user_func_array
EN

Stack Overflow用户
提问于 2010-09-09 23:18:28
回答 1查看 8.7K关注 0票数 8

可能重复:

Is it possible to pass parameters by reference using call_user_func_array()?

下面的代码行在PHP5.1中工作,但在PHP5.3中不起作用。

代码语言:javascript
复制
$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行的

中给出的值

我将代码更改为以下代码,它起了作用:

代码语言:javascript
复制
$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的功能,以便能够在运行时动态绑定变量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-09 23:26:53

我在 on the PHP manual page of mysqli_stmt::bind_param()的一个用户说明中找到了问题的答案(稍微修改了一下):

I在迁移到php5.3之后,call_user_func_arraybind_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服务器中工作。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3681262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档