2014-10-06 85 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