【问题标题】:Passing an Array as Arguments in php [duplicate]在php中将数组作为参数传递[重复]
【发布时间】:2016-09-27 14:35:41
【问题描述】:

我正在尝试准备一个带有未知数量参数的 sql 语句!这些参数在数组中是过去的。该函数的正常语法是:

$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() 期望参数 1 为有效回调,未找到函数 '$stmt->bind_param' 或无效函数。

我认为 call_user_func_array 可能不是正确使用的函数! 我用谷歌搜索了几个小时,但找不到这个小问题的解决方案。

【问题讨论】:

  • 请阅读the documentation关于您正在使用的功能。请注意,示例向您展示了如何通过此函数正确调用对象方法。

标签: php mysqli


【解决方案1】:

如果您使用的是 PHP 5.6+,您也可以使用 splat 运算符而不是使用 call_user_func_array,例如

$stmt->bind_param($types, ...$request['params']);

这对您的用例来说会更整洁,因为 bind_param 有一个初始参数,否则需要将 shift 编到参数数组的前面。

【讨论】:

  • 我没有使用 5.6+!因为这只是在 usbwebserver 上的测试,那就是 5.2,但如果我有那个版本,你的解决方案将是最好的
【解决方案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】:

    尝试类似:

    call_user_func_array(array($stmt,'bind_param'),$request['params']);
    

    【讨论】:

    • 谢谢!问题是它给出了一个值而不是一个参考: mysqli_stmt::bind_param() 的参数 2 预期是一个参考,给定的值
    • 解决了!我用call_user_func_array(array($stmt,'bind_param'),refValues($request['params']));这个功能我上网了:function refValues($arr){ if (strnatcmp(phpversion(),'5.3') >= 0) //Reference is required for PHP 5.3+ { $refs = array(); foreach($arr as $key => $value) $refs[$key] = &$arr[$key]; return $refs; } return $arr; }
    猜你喜欢
    • 2013-07-24
    • 2013-09-13
    • 2023-03-03
    • 2023-04-05
    • 1970-01-01
    • 2017-12-02
    • 2013-08-13
    • 2018-02-01
    • 2010-10-19
    相关资源
    最近更新 更多