我试图通过一个数组作为一个函数的参数,我有一些麻烦。函数如下:
$stmt->bind_param();
我正在研究这个,发现你可以使用这个:
$stmt->bind_param(...$values);
这在我的开发服务器(PHP 7.0.0)上运行良好,但当我将其输入到另一个服务器(PHP 5.*)时,我得到了以下错误:
语法错误,unexpected '。',期待')'
经过进一步研究,我试着:
call_user_func_array(array($stmt, 'bind_param'), $values);
并得到这个错误:
call_user_func_array()期望参数1是一个有效的回调,第一个数组成员不是一个有效的类名或对象
我知道我可以输入参数,一切都会很好,但我需要函数接受任意数量的参数(这就是导致函数思想的原因)。
函数如下:
function updateId($id, $data){
$mysqli = dbConnect::connect();
$sm=array();
$values=array();
$dataString = array();
foreach($data as $column=>$value){
$dataString[] = ($column .'= ?');
$values[] = $value;
if(gettype($value)==="string"){
$sm[] = 's';
}elseif(gettype($value)==="integer"){
$sm[] = 'i';
}elseif(gettype($value)==="double"){
$sm[] = 'd';
}else{
$sm[] = 'b';
}
}
$dataString = implode(', ',$dataString);
$sm = implode('',$sm);
$prepString = "UPDATE $this->tablename SET $dataString WHERE id=$id";
array_unshift($values, $sm);
$stmt = $mysqli->prepare($prepString);
$stmt->bind_param(...$values);
$stmt->execute() or die($stmt->error);
$stmt->close();
$mysqli->close();
}
您得到一个错误,因为您传递非引用值给bind_param
。可以使用call_user_func_array
,但是必须确保传递的值是引用。你可以这样做:
改变:
$values[] = $value;
:
$values[] = &$data[$column];
并且(就像你已经做过的那样)改变这个:
$stmt->bind_param(...$values);
这:
call_user_func_array(array($stmt, 'bind_param'), $values);