【问题标题】:Cannot bind multiple parameters using call_user_func_array()无法使用 call_user_func_array() 绑定多个参数
【发布时间】:2015-12-07 14:52:29
【问题描述】:

我知道他们已经有很多很多关于这个的问题,但我不知道为什么我的不起作用。

如果我只使用以下代码,我的代码可以正常工作: $this->stmt->bind_param("ii", $params[0], $params[1]);

但如果我使用 call_user_func_array,它就会中断。我得到的一个建议是通过引用传递 $parameters 数组,但在变量之前添加 & 也会破坏我的代码...

非常感谢任何帮助!

这是我的代码:

数据库类:

function selectQuery($sql, $paramTypes = false, $params = false) {
        //Prepare statement
        $this->stmt = $this->conn->prepare($sql);

        if($this->stmt === false) {
            //We have an error
            echo 'Wrong SQL: ' . $sql . ' Error: ' . $this->conn->error;
        }

        //This part doesn't work...

        // if ($params) {
        //  //Bind an unknown number of parameters
        //  $parameters = array_merge(array($paramTypes), $params);

        //  call_user_func_array(array($this->stmt, 'bind_param'), $parameters);
        // }

        //This works.

        $this->stmt->bind_param("ii", $params[0], $params[1]);

        //Execute statement
        $this->stmt->execute();

        if ($this->stmt->error) {
            echo $this->stmt->error;
            return false;
        }

        //Get the results
        $result = $this->stmt->get_result();

        $data = $result->fetch_all(MYSQLI_ASSOC);

        //Close statement
        $this->stmt->close();

        //Return the results
        return $data;
    }

测试页面:

<?php
require_once('DatabaseAccess.php');

$db = new DB();

$sql = "SELECT * FROM table WHERE id = ? OR id = ?";

echo "Fetching data....<br>";
$result = $db->selectQuery($sql, "ii", array(1, 2));

foreach($result as $r) {
    echo "<pre>".print_r($r, 1)."</pre>";
}
?>

决定补充更多信息:

我将使用这个函数来传递参数类型和参数,但数量会有所不同。当我查找如何执行此操作时,每个人都建议使用 call_user_func 的东西,但每次我尝试它(尝试了几种不同的方法)它都行不通。通读许多线程,但它似乎从来没有工作过。如果我直接使用 bind_params 函数,它就可以工作,并且我会返回正确的数据。

使用 call_user_func 的东西我没有得到 ? mysqli 错误,这是当我尝试通过引用传递并且代码完全中断时...

【问题讨论】:

  • 如何使用 call_user_func_array() 以及如何将参数传递给该函数?
  • 参数是从测试页传过来的,代码在上面。 call_user_func_array() 也在上面的代码中,在 DB Class 部分(它被注释掉了)
  • 你不能通过引用传递参数 - 这是写在文档中的;所以试试这个。 mb 这将帮助你 $res = array(); foreach($parameters as $key => $value) {$res[$key] = &$parameters[$key];}
  • 你能在答案中稍微扩展一下吗?我现在真的不明白这一切:(
  • 我已经用你的代码让它工作了。谢谢!如果您将其放入答案中,我可以将其标记为正确:)

标签: php mysqli


【解决方案1】:

放在 call_user_func_array() 之前

$res = array();
foreach($parameters as $key => $value) {
    $res[$key] = &$parameters[$key];
}

【讨论】:

  • 感谢您的回答:)
猜你喜欢
  • 2010-12-27
  • 1970-01-01
  • 2017-10-16
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多