Como chamar mysqli_stmt com call_user_func_array?

Estou tentando passar um número variável de argumentos para um método de uma class. Aqui está a function da class que eu estou tentando invocar:

class DbHelper{ .... public function Execute($query, $params){ $this->open(); $stmt = $this->mysqli->prepare($query) or die($this->mysqli->error); call_user_func_array(array($stmt, 'bind_param'), $params); // 1 return $stmt->execute() ? $stmt->num_rows : 'ERROR'; } .... } 

Aqui está o código que estou usando para invocar a function:

 .... $conn = new DbHelper(); $params = array('ss', $ID, $i); $conn->Execute('INSERT INTO some_table (ID, `Index`) VALUES (?,?)', $params); .... 

Isso dá um erro:

Aviso: Parâmetro 2 para mysqli_stmt :: bind_param () esperado para ser uma referência, valor dado em ..mypath .. \ dbhelper.php on line

Na minha outra publicação (clique aqui ) na mesma questão alguns meses atrás, alguns sugeriram que use o código abaixo:

 call_user_func_array(array($stmt, 'bind_param'), refValues($params)); function refValues($arr){ if (strnatcmp(phpversion(),'5.3') >= 0){ //Reference is required for PHP 5.3+ $refs = array(); foreach($arr as $key => $value) $refs[$key] = &$arr[$key]; return $refs; } return $arr; } 

Usar isso novamente dá o mesmo erro. Se eu invocar a function assim (adicionando e antes de $ params):

 $conn->Execute('INSERT INTO some_table (ID, `Index`) VALUES (?,?)', &$params); // 2 

Recebo este erro:

Desaconselhado: a referência de passagem de tempo de chamada foi obsoleta em ..mypath .. \ save.php on line

Alternativamente, tentei esta definição para a function DbHelper::Execute :

 public function Execute($query, $params){ $this->open(); $stmt = $this->mysqli->prepare($query) or die($this->mysqli->error); $stmt->{'bind_param'}($params); // 3 return $stmt->execute() ? $stmt->num_rows : 'ERROR'; } 

Invocar isso mostra o erro como:

Aviso: Contagem de parâmetros errados para mysqli_stmt :: bind_param () em ..mypath .. \ dbhelper.php on line

Onde, a contagem de parâmetros é correta para bind_param, se a function for chamada corretamente.

A versão do PHP é 5.3.8.

Alguma ajuda por favor?

A function que foi sugerida para você também precisa aceitar $params por referência. Aqui está uma versão ligeiramente atualizada:

 function refValues(&$arr) { //Reference is required for PHP 5.3+ if (strnatcmp(phpversion(),'5.3') >= 0) { $refs = array(); foreach(array_keys($arr) as $key) { $refs[$key] = &$arr[$key]; } return $refs; } return $arr; }