call_user_func_array()用法mysqli

I'm trying to simply update a table with dynamic variables and I am stuck, I have read and searched how to do dynamic binding and have found out that I need to use call_user_func_array() but I tried to use it as below and it still doesn't work, can someone show me how to use it?

$a = array('ssi');
$b = array($_POST['h'], $_POST['m'],  2);
$params = array_merge($a, $b);

 $stmt = $db->prepare("UPDATE `test` set field_1 = ?, field_2 = ? where id = ?");
 call_user_func_array(array(&$stmt, 'bind_param'), $params);
 $stmt->execute();

I am getting the below error

Warning: Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given

can someone help me out? I have looked at other similar questions and still stuck.

What is wrong with this?

$db = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);

$params = array($_POST['h'], $_POST['m'],  2);

$stmt = $db->prepare("UPDATE `test` set field_1 = ?, field_2 = ? where id = ?");

$stmt->execute($data);

Alternatively, if you insist on mysqli:

$db = new mysqli($host, $user, $pass, $dbname);

$stmt = $db->prepare("UPDATE `test` set field_1 = ?, field_2 = ? where id = ?");

$stmt->bind_param("ssi", $_POST['h'], $_POST['m'],  2);

$stmt->execute();