Почему не получается сделать запрос в базу данных 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(); } }
Ошибка возникает из-за того, что в методе 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 так:
Ошибка возникает из-за того, что в методе 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);
}
После внесения этих изменений, ваш запрос к базе данных должен выполниться без ошибки.