2017-10-17 66 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我同意你的看法,作为一个研究案例,这只是另一种可能性。 –

相关问题