好的,这是一个奇怪的问题,所以请耐心等待我解释。
我们将开发服务器从 PHP 5.2.5 升级到 5.3.1。
在切换后加载我们的代码,我们开始收到如下错误:
警告:mysqli_stmt::bind_param() 的参数 2 应为引用,在第 105 行的/home/spot/trunk/system/core/Database.class.php 中给出值
提到的行(105)如下:
call_user_func_array(Array($stmt, 'bind_param'), $passArray);
我们将这一行更改为:
call_user_func_array(Array($stmt, 'bind_param'), &$passArray);
此时(因为allow_call_time_pass_reference
)被关闭,php抛出这个:
已弃用:调用时传递引用已在第 105 行的/home/spot/trunk/system/core/Database.class.php 中弃用
在尝试修复此问题一段时间后,我崩溃并将 allow_call_time_pass_reference
设置为 on。
这摆脱了 Deprecated
警告,但现在 Warning: Parameter 2 to mysqli_stmt::bind_param() expected to be a reference
警告每次都会抛出, 有或没有引用。
我对如何解决这个问题一无所知。如果目标方法是我自己的,我只会在 func 声明中引用传入的 var,但它是(相对) native 方法(mysqli)。
有人经历过吗?我怎样才能绕过它?
谢谢。
最佳答案
我刚刚遇到了同样的问题,通过 call_user_func_array 调用 bind_param 并传递了一个参数数组。解决方法是修改要引用的数组中的值。它不优雅,但有效。
call_user_func_array(array($stmt, 'bind_param'), makeValuesReferenced($passArray));
function makeValuesReferenced($arr){
$refs = array();
foreach($arr as $key => $value)
$refs[$key] = &$arr[$key];
return $refs;
}
关于reference - PHP 5.3.1 的引用传递问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2045875/