2014-10-06 46 views
-1

我试图简单地用动态变量更新一个表,我卡住了,我已经阅读和搜索如何做动态绑定,并发现我需要使用call_user_func_array()但我试图使用它如下,它仍然不起作用,有人可以告诉我如何使用它?call_user_func_array()用法mysqli

$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 

有人可以帮我吗?我看过其他类似的问题,但仍然停滞不前。

+0

'的var_dump($语句);'PS:你为什么把'&''在$ stmt'的面前? – zerkms 2014-10-06 22:57:32

+0

你在调用call_user_func_array()中的参数吗? http://php.net/manual/en/function.call-user-func-array.php说,第一个参数应该是要调用的函数名称(bind_param),然后是一个(引用)函数数组作为第二个参数的参数。 – cjs1978 2014-10-06 23:00:42

+0

你看过其他类似的问题吗?为什么你坚持使用'mysqli',然后,如果PDO避免这种解决方法? – mario 2014-10-06 23:01:57

回答

1

这是什么问题?

$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(); 
+0

谢谢,修正了那个报价。 PDO是一个更好的数据库接口;我假设OP正在学习这些东西,所以宁愿指点他或她的方向,而不是他们想要做的事情。我希望当我开始时,PDO已经回来了! – miken32 2014-10-06 23:16:00

+0

谢谢,虽然替代方法是毫无意义的,因为我试图避免这种绑定,但PDO版本更容易并且工作。 – user2666310 2014-10-06 23:21:29

+0

是的,PDO是非常优越的,不用担心你的陈述中有多少个s和我,只要通过你的阵列就行了! – miken32 2014-10-06 23:23:01