2016-09-27 134 views
1

我想準備一個未知數量的參數的SQL語句!這些參數在數組中已經過去了。該函數的語法正常會是:傳遞數組作爲參數在PHP

$stmt->bind_param("string of types",param1,param2,...,paramN) 

問題是我不知道如何在功能$ stmt-> bind_param參數添加了一個數組

我有這樣的代碼,但它不工作:

$stmt= $conn->prepare($request['query']); 
if(isset($request['params'])){ 
call_user_func_array('$stmt->bind_param',$request['params']); 
} 
$stmt->execute(); 
$result = $stmt->get_result(); 

$ request ['params']包含需要在函數中添加的正確參數。

但call_user_func_array給了我這個錯誤:

call_user_func_array() expects parameter 1 to be a valid callback, function '$stmt->bind_param' not found or invalid function.

我想call_user_func_array可能不使用正確的功能! 我搜索了幾個小時,但找不到解決這個小問題的方法。

+1

請閱讀[文檔](http://php.net/call_user_func_array)關於您正在使用的功能。請注意,這些示例顯示瞭如何通過此函數正確調用對象方法。 –

回答

1

嘗試類似:

call_user_func_array(array($stmt,'bind_param'),$request['params']); 
+0

謝謝!問題是它給出了一個值,而不是一個引用:參數2到mysqli_stmt :: bind_param()預計是一個參考,給出的值 –

+0

解決了它!我使用了'call_user_func_array(array($ stmt,'bind_param'),refValues($ request ['params']));'用這個函數我在網上找到了''function refValues($ arr){if(strnatcmp phpversion(),'5.3')> = 0)// PHP引用是必需的5.3+ { $ refs = array(); ($ arr as $ key => $ value) $ refs [$ key] =&$ arr [$ key]; return $ refs; } return $ arr; }' –

2

要使用的方法作爲回調參數call_user_func_array,使用與對象名稱的數組,並且該方法名它作爲回調參數。

檢查PHP的進一步解釋call_user_func_array文檔頁面:http://php.net/manual/pt_BR/function.call-user-func-array.php

// Call the $foo->bar() method with 2 arguments 
$foo = new foo; 
call_user_func_array(array($foo, "bar"), array("three", "four")); 
3

如果你使用PHP 5.6+,你也可以使用splat運營商,而不是使用call_user_func_array,例如

$stmt->bind_param($types, ...$request['params']); 

這將是整潔爲您的使用情況,因爲有一個初始參數bind_param,否則必須shift -ed到的參數數組的前面。

+0

我沒有使用5.6+!因爲它只是一個usbwebserver上的測試,而且這個5.2,但如果我有這個版本,你的解決方案將是最好的 –