Почему не получается сделать запрос в базу данных 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
221 +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 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир