Php 调用用户函数数组()用法mysqli

Php 调用用户函数数组()用法mysqli,php,mysqli,Php,Mysqli,我试图简单地用动态变量更新一个表,但我被卡住了,我已经阅读并搜索了如何进行动态绑定,并且发现我需要使用call\u user\u func\u array() $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\u user\u func\u array()

$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();
我得到下面的错误

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

有人能帮我吗?我已经看了其他类似的问题,但仍然无法回答。

这有什么问题吗

$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);
或者,如果您坚持使用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();

var_dump($stmt)附言:为什么你把
&
放在
$stmt
前面?你把call\u user\u func\u array()中的参数弄混了吗?说第一个参数应该是要调用的函数名(bind_param),然后是一个函数参数数组(引用)作为第二个参数?如果PDO避免了这种解决方法,那么你为什么要坚持使用
mysqli
。@zerkms,我做了var_转储,它给了我
bool(false)
,我能够修复它,因为我的表名错了。现在我得到了“警告:mysqli_stmt::bind_param()的参数2应该是一个引用,给定的值是”我刚从其他答案中复制了它。@Mario,谢谢,修复了那个引用。PDO是一个更好的数据库接口;我认为OP正在学习这些东西,所以我更愿意为他或她指出更好的方向,而不是他们试图做的事情。我希望PDO在我出发的时候就在我身边!谢谢,虽然替代方法是没有意义的,因为我试图避免像那样绑定,但PDO版本更容易,而且它工作得很好。是的,PDO非常优越,不用担心计算您的语句中有多少s和I,只需传递数组就可以了!