无法使用call_user_func_array()

时间:2015-12-07 14:52:30

标签: php mysqli

我知道他们已经有很多很多问题,但我不知道为什么我的工作没有。

如果我只使用以下内容,我的代码工作正常: $ 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错误,这是我尝试通过引用传递而代码刚刚完全破坏...

1 个答案:

答案 0 :(得分:1)

将它放在call_user_func_array()

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