Почему не получается сделать запрос в базу данных PDO PHP? Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: mode must be an integer in C:\OSPanel\domains\WorkLeader\app\models\Admin.php on line 55
( ! ) PDOException: SQLSTATE[HY000]: General error: mode must be an integer in C:\OSPanel\domains\WorkLeader\app\models\Admin.php on line 55
Выдаёт вот такую ошибку. Пытаюсь делать сайт с использованием ООП и MVC, всё было ок, но появился затык ввиде PDO. При том что в отдельном файле index.php где таким же способом всё сделано, запрос срабатывает.
Вот моя модель Model.php PDO::ERRMODE_EXCEPTION];
$config = require 'app/config/db.php';
extract($config);
try {
$this->db = new PDO("mysql:host=$host;dbname=$name;charset=$charset", $user, $password, $option);
} catch (PDOException $e) {
die("Ошибка");
}
}
public function query($sql, $params = []) {
$stmt = $this->db->prepare($sql);
if (!empty($params)) {
foreach ($params as $key => $val) {
$stmt->bindValue(':'.$key, $val);
}
}
$stmt->execute();
// return $stmt;
}
}
Файл Admin.php который наследует модель Model.php '',
'name' => $post["name"],
'url' => $post["url"],
'country' => $post["country"],
'sex' => $post["sex"],
'salary' => $post["salary"],
];
$sql = "INSERT INTO `jobs1` (`id`, `name`, `url`, `country`, `sex`, `salary`) VALUES (:id, :name, :url, :country, :sex, :salary)";
$this->db->query($sql,$params);
}
}
И контроллер, который вызывает модель AdminController.phpmodel->jobsValidate($_POST,'add')) {
$this->view->message('error', $this->model->error, 'Ошибка!');
}
$this->model->jobAdd($_POST);
$this->view->message('success','Вакансия добавлена','Успешно!');
}
$this->view->render();
}
}

21 Авг 2019 в 06:58
185 +1
0
Ответы
1

Ошибка возникает из-за того, что в методе query модели Model вы передаете параметры не в корректном формате. Вместо передачи массива параметров, нужно передавать их как отдельные значения.

Измените метод query в модели Model.php следующим образом:

public function query($sql, $params = []) {
$stmt = $this->db->prepare($sql);
if (!empty($params)) {
foreach ($params as $key => $val) {
$stmt->bindValue($key, $val);
}
}
$stmt->execute();
}

И потом вызывайте метод query в методе jobAdd модели Admin.php так:

public function jobAdd($post) {
$params = [
':id' => '',
':name' => $post["name"],
':url' => $post["url"],
':country' => $post["country"],
':sex' => $post["sex"],
':salary' => $post["salary"],
];
$sql = "INSERT INTO `jobs1` (`id`, `name`, `url`, `country`, `sex`, `salary`) VALUES (:id, :name, :url, :country, :sex, :salary)";
$this->query($sql, $params);
}

После внесения этих изменений, ваш запрос к базе данных должен выполниться без ошибки.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 387 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир