2017-10-17 86 views
1

我有PHP版本5.5.9-1,並且無法使用call_user_func_array和bind_param作爲stmt。我有以下代碼PHP 5.5,無法獲得call_user_func_array與bing_param配合使用

$query = "SELECT * FROM studentTable WHERE firstname = ?"; 
if(!($stmt = $conn->prepare($query))){ 
    echo "Prepare failed: (" . $conn->errno . ") " . $conn->error; 
    return; 
} 
$paramType= 's'; 
$paramValue= 'bob'; 
$a_params = array(&$paramType, &$paramValue); 
call_user_func_array(array($stmt, 'bind_param'),$a_params) 

我收到以下錯誤,我不知道爲什麼

Binding parameters failed: (0) 

我已經試過包裝字符串「‘S’」,但報告說,沒有足夠的論據。我究竟做錯了什麼?

謝謝

UPDATE

我試圖將代碼從php5.3 - mysqli_stmt:bind_params with call_user_func_array warnings但仍然沒有工作

+0

爲什麼你使用call_user_func_array而不是直接在stmt上調用bind_param? – Gordon

+0

我想動態添加綁定,只是想獲得工作示例 – DanielJ

+1

[您的代碼基本上可以工作](https://3v4l.org/EHOk2),您是否100%確定該錯誤不是來自其他地方?可能有可能,你的錯誤甚至不是一個錯誤?我猜測你檢查錯誤的方法是錯誤的,因爲你不檢查類型安全。 – DanFromGermany

回答

-1

我有一個類似的問題(我不記得是什麼問題),我使用ReflectionMethod解決了這種情況。

$type = 's'; 
$parameter = 'bob'; 

$values = [$type , &$parameter]; 

$reflectionMethod = new \ReflectionMethod($statement , 'bind_param'); 
$reflectionMethod->invokeArgs($statement , $values); 

$statement->execute(); 

上面的代碼來自我自己的simple study case。使用PHP 5.5創建並在Debian Jessie上用PHP 7(很久以前......)進行測試。

畢竟,你的代碼也應該工作。通過反射,這段代碼和你的代碼一樣。

Ps .:因爲您可以在下面的評論中閱讀,它比call_user_func_array慢,應該在生產中避免。

+2

反映在PHP是緩慢的,應避免在生產,丹尼爾的方法應該工作 – DanFromGermany

+0

@DanFromGermany我同意你的看法,作爲一個研究案例,這只是另一種可能性。 –

相關問題