reference - PHP 5.3.1 的引用传递问题

标签 reference mysqli php

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

我们将开发服务器从 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/

相关文章:

php - 如何在一个 MySQL 查询中选择 2 个连接表?

php - 多维数组元素如果为空则删除整个子数组 PHP

c++ - 构造函数参数样式

java - 按类引用字段和按对象调用字段有什么区别?

php - Zend Framework 2 带有 flashMessenger 的重定向() 不起作用

PHP mysqli 准备语句不工作

php - MySQLi 如何检查表是否存在?

c# - 通过引用传递和使用 ref

java - 我正在java中实现链表,但我的代码既没有给出任何错误,也没有产生任何输出

php - 注册时发生 JSON 和 PHP 错误 - Android Studio