2011-05-03 35 views
0

我有功能getArray(pram1, pram2)存儲在數據庫(MySQL)中,它返回數組中的數據。 當我通過查詢時,它會返回函數名稱,因爲我將它存儲在數據庫中,但是不會執行此函數。如何調用和執行存儲在數據庫中的函數?

的代碼,我使用的,是這樣的:

$result=eval("return \$ret = $db_query_function;"); 
$db_query_function is variable that have function name getArray(pram1, pram2). 

錯誤產生的eval()'d代碼

回答

0

你將不得不使用call_user_func()。

call_user_func('function_name', $parameter); 
+0

函數定義存儲在數據庫中 – saint 2011-05-03 14:21:30

0

首先,它可能不是在數據庫中存儲函數的最佳解決方案。

如果你想存儲功能實現在數據庫中,你必須單獨存放只有函數體和參數列表,(但沒有名稱應給予功能),所以你可以使用create_function放你的函數在運行時變成一個變量。

例如:

function add($a, $b) 
{ 
    return $a + $b; 
} 

以類似於變量都:

$arguments = '$a, $b'; // note single quotes, no variable expansion! 
$implementation = 'return $a + $b;'; // single quotes again 

$myFunction = create_function($arguments, $implementation); 

現在你可以調用你的函數:

$sum = $myFunction(10, 20); // $sum will now hold 30 

如果你只是想存儲你的代碼在要運行的數據庫中,所有你需要的是eval

在這兩種情況下,您都很可能(但不是絕對)錯過了處理代碼的更好/更簡單的方法。在你的示例中,最可能的錯誤是pram1和pram2需要字符串中的美元符號,但代碼示例不夠完整。也可能是功能不存在,或者你錯過了一個分號,或...

嘗試:

$result = eval('return '.$db_query_function); 

getArray(pram1, pram2). 

好運。

+0

函數定義stroe在數據庫中 – saint 2011-05-03 14:21:03

相關問題