2016-09-27 146 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,但如果我有这个版本,你的解决方案将是最好的 –