У меня проблема с привязкой нескольких значений. Я экспериментировал с одним значением, и оно отлично работает. я что-то пропустил?
когда я запускаю запрос, он выдает мне ошибку:
Предупреждение: 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';
}
}
}
Вы нарушили здесь почти все правила ООП. в вашем классе не должно быть таких переменных, как _query.
Что вам действительно нужно, это только эти пять строк:
public function runQuery($sql, $bind_value = array()) {
$stmt = $this->_pdo->prepare($sql);
$stmt->execute($bind_value);
return $stmt;
}
которые должны вернуть утверждение, а не устанавливать его как переменную класса.
Функция get () также бесполезна и неправильна, и вам лучше ее избегать. Если вы действительно хотите, чтобы функция автоматизировала запросы на выборку, вам нужно взглянуть на существующие конструкторы запросов, такие как AuraSQL.
Других решений пока нет …