关注我的代码:
$query = mysqli_prepare($res, $my_query);
foreach($data as $key => $value){
$data[$key] = &$data[$key];
}
call_user_func_array(array($query, 'bind_param'), $data);
mysqli_stmt_execute($query);
mysqli_stmt_close($query);
查询有效,但我在日志中发现了警告:
call_user_func_array() expects parameter 1 to be a valid callback
我的PHP版本是5.5。怎么解决?
答案 0 :(得分:2)
call_user_func_array([ClassName, Method], array $arguments);
问题是参数1是您案例中的对象。
这应该有效
call_user_func_array(array('mysqli_stmt', 'bind_param'), $data);
此外,mysqli_prepare在出错时返回false,因此无法调用。
答案 1 :(得分:0)
对mysqli_prepare()
的调用很可能失败,返回一个布尔值。在尝试使用mysqli_prepare()
之前,您需要检查mysqli_stmt
是否实际返回$query = mysqli_prepare($res, $my_query);
if (!$query) {
throw new Exception('Error in preparing statement: ' . mysqli_error($res));
}
foreach($data as $key => $value){
$data[$key] = &$data[$key];
}
call_user_func_array(array($query, 'bind_param'), $data);
mysqli_stmt_execute($query);
mysqli_stmt_close($query);
个对象。
$query
如果没有这个检查,call_user_func_array()
可能是一个布尔值,当在传递给$connection = new mysqli('host', 'username', 'password');
$statement = $connection->prepare($my_query);
if (!$statement) {
throw new Exception('Error in preparing statement: ' . $connection->error);
}
foreach($data as $key => $value){
$data[$key] = &$data[$key];
}
call_user_func_array([$statment, 'bind_param'], $data);
$statement->execute();
$statement->close();
的数组中使用时,它当然不会创建有效的回调。
此外,我还建议在使用mysqli时使用OO样式。
{{1}}