Значения привязки PHP

У меня проблема с привязкой нескольких значений. Я экспериментировал с одним значением, и оно отлично работает. я что-то пропустил?

при запуске запроса выдается сообщение об ошибке: Предупреждение: PDOStatement::execute(): SQLSTATE[HY093]: недопустимый номер параметра: число связанных переменных не соответствует количеству токенов в C:\xampp\htdocs\Media\admin\dashboard\classes\DB.php в строке 35

private function runQuery($sql, $bind_value = array()) {
    $this->_error = false;
    if($ms = $this->_query = $this->_pdo->prepare($sql)) {
        $this->_query->bindValue($x, $bind_values);
        if($this->_query->execute()) { //**ERROR FOUND HERE**
            echo 'ok';
        }
        die();
    }
}

public function get($column, $table, $where = array()) {
    if($where) {
        if(count($where) === 3) {
            $operators = array(
                '=',
                '<',
                '>',
                '>=',
                '<='
            );

            $field      = $where[0];
            $operator   = $where[1];
            $value      = $where[2];

            $bind_value = array(
                $column,
                $table,
                $field,
                $operator,
                $value,
            );
            if(in_array($operator, $operators)) {
                $sql = "SELECT ? ? WHERE ? ? ?";
                return $this->runQuery($sql, $bind_value);
            }
        } else {
            echo 'problem';
        }
    }
}

1 ответ

Вы нарушили здесь почти все правила ООП. в вашем классе не должно быть таких переменных, как _query.

Что вам действительно нужно, это только эти пять строк:

public function runQuery($sql, $bind_value = array()) {
    $stmt = $this->_pdo->prepare($sql);
    $stmt->execute($bind_value);
    return $stmt;
}

которые должны возвращать оператор, а не устанавливать его как переменную класса.

Функция get() также бесполезна и неправильна, и вам лучше ее избегать. Если вы действительно хотите, чтобы функция автоматизировала запросы на выборку, вам нужно взглянуть на существующие конструкторы запросов, такие как AuraSQL.

Другие вопросы по тегам