PHP 5.5,无法获得call_user_func_array与bing_param配合使用
我有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但仍然没有工作
我有一个类似的问题(我不记得是什么问题),我使用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慢,应该在生产中避免。
反映在PHP是缓慢的,应避免在生产,丹尼尔的方法应该工作 – DanFromGermany
@DanFromGermany我同意你的看法,作为一个研究案例,这只是另一种可能性。 –
为什么你使用call_user_func_array而不是直接在stmt上调用bind_param? – Gordon
我想动态添加绑定,只是想获得工作示例 – DanielJ
[您的代码基本上可以工作](https://3v4l.org/EHOk2),您是否100%确定该错误不是来自其他地方?可能有可能,你的错误甚至不是一个错误?我猜测你检查错误的方法是错误的,因为你不检查类型安全。 – DanFromGermany