我正在尝试将可变数量的参数传递给类的方法。这是我试图调用的类的函数:
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';
}
....
}
这是我用来调用该函数的代码:
....
$conn = new DbHelper();
$params = array('ss', $ID, $i);
$conn->Execute('INSERT INTO some_table (ID, `Index`) VALUES (?,?)', $params);
....
这给出了一个错误:
警告:mysqli_stmt::bind_param() 的参数 2 应为参考,在线 ..mypath..\dbhelper.php 中给出的值
在几个月前关于同一问题的另一篇文章(单击此处)中,有人建议我使用以下代码:
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;
}
再次使用它会产生同样的错误。如果我像这样调用函数(在 $params 之前添加 &):
$conn->Execute('INSERT INTO some_table (ID, `Index`) VALUES (?,?)', &$params); // 2
我收到此错误:
已弃用:在线上的 ..mypath..\save.php 中已弃用调用时传递引用
或者,我已经尝试过这个函数的定义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';
}
调用它显示错误为:
警告:在线 ..mypath..\dbhelper.php 中 mysqli_stmt::bind_param() 的参数计数错误
其中,如果函数调用正确,则参数计数对于 bind_param 是正确的。
PHP 的版本是 5.3.8。
请问有什么帮助吗?