我尝试将数组作为函数的参数传递,并且遇到了一些麻烦。 这是函数。
$stmt->bind_param();
我正在研究这个并发现你可以使用它:
$stmt->bind_param(...$values);
这在我的开发服务器(PHP 7.0.0)上运行良好,但当我将其输入到另一台服务器(PHP 5. *)时,我收到以下错误:
语法错误,意外情况'。',期待')'
经过进一步研究,我尝试了:
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();
}
答案 0 :(得分:1)
您收到错误是因为您将非参考值传递给bind_param
。您可以使用call_user_func_array
,但必须确保传递的值是引用。这可以实现如下:
改变这个:
$values[] = $value;
到此:
$values[] = &$data[$column];
而且(就像你已经做过的那样)改变了这个:
$stmt->bind_param(...$values);
进入这个:
call_user_func_array(array($stmt, 'bind_param'), $values);