PHP - call_user_func_array返回警告

时间:2014-07-28 02:47:04

标签: php mysqli

关注我的代码:

$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。怎么解决?

2 个答案:

答案 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}}