PHP 5.3.1 中的按引用传递问题

2022-08-30 14:12:05

好吧,这是一个奇怪的问题,所以请耐心等待我解释。

我们将开发服务器从 PHP 5.2.5 升级到 5.3.1。

在切换后加载我们的代码,我们开始收到如下错误:

Warning: Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given in /home/spot/trunk/system/core/Database.class.php on line 105

提到的行(105)如下:

call_user_func_array(Array($stmt, 'bind_param'), $passArray);

我们将该行更改为以下内容:

call_user_func_array(Array($stmt, 'bind_param'), &$passArray);

此时(因为 )已关闭,php 会抛出以下内容:allow_call_time_pass_reference

Deprecated: Call-time pass-by-reference has been deprecated in /home/spot/trunk/system/core/Database.class.php on line 105

在尝试修复此问题一段时间后,我崩溃并开始了。allow_call_time_pass_reference

这摆脱了警告,但现在警告每次都会抛出,有或没有引用。DeprecatedWarning: Parameter 2 to mysqli_stmt::bind_param() expected to be a reference

我不知道如何解决这个问题。如果目标方法是我自己的,我会在func声明中引用传入的vars,但它是一个(相对)本机方法(mysqli)。

有没有人经历过这种情况?我该如何绕过它?

谢谢。


答案 1

我刚刚遇到了同样的问题,通过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;

}

答案 2

您正在传递元素数组 ($passArray)。传递的数组中的第二项需要是引用,因为它实际上是要传递给函数的项列表。


推荐