绑定参数时的错误(PHP)

时间:2011-02-27 03:42:08

标签: php parameters

我一直试图让这个工作在一天中的大部分时间都无济于事。

基本上,我正在尝试在foreach()循环中使用bind_param(),但是,当我这样做时,我会收到以下错误:

Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of variables doesn't match number of parameters in prepared statement in /nfs/domains/domain.com/html/v2/includes/classes/class.Database.php on line 72

Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of variables doesn't match number of parameters in prepared statement in /nfs/domains/domain.com/html/v2/includes/classes/class.Database.php on line 72

我假设这是由于PHP认为由于循环中的单个bind_param()语句只有一个参数被绑定,因此它与prepare语句中指定的参数数量不匹配。 / p>

如果这是对的,我该如何纠正?

代码摘录(第19行):

public function query($sql, $params) {

    if(!$sobj = $this->conn->prepare($sql)) {

        die('Query Prepare Error (' . $this->conn->mysqli_errno . ') '
            . $this->conn->mysqli_error);

    } else {

        if(!is_array($params)) {

            $params = array_slice(func_get_args(), 1);

        }

        foreach($params as $value) {

            $type = strtolower(gettype($value));
            $sobj->bind_param($type[0], $value);

        }                      

        $sobj->execute();
        $sobj->bind_result($result);
        $sobj->fetch();

        $sobj->close();

        return $result;

    }

}

感谢。

1 个答案:

答案 0 :(得分:2)

mysqli_stmt::bind_param希望您在一次调用中绑定所有必需的参数,而不是在多次连续调用中绑定。它需要更像这样:

$types = '';
foreach($params as $value) {
    $types.= substr(strtolower(gettype($value)), 0, 1);
}
call_user_func_array(array($sobj, 'bind_param'), array_merge(array($types), $params)));

请查看有关call_user_func_array here的警告。