Ошибки при связывании параметров (PHP) - PullRequest
0 голосов
/ 27 февраля 2011

Я пытался заставить это работать большую часть дня безрезультатно.

По сути, я пытаюсь bind_param () внутри цикла foreach (), но когда яделаю, я получаю следующие ошибки:

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 () внутри цикла, поэтому он нене соответствует числу параметров, указанных в операторе подготовки.

Если это правильно, как мне исправить это?

Извлечение кода (строка 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 Ответ

2 голосов
/ 27 февраля 2011

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 здесь , хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...