про проблему тебе все уже рассказали, все изменения в БД должны быть только методом POST.
Но поскольку вопрос изначально про класс, качестве шефской помощи перепишем его на более осмысленный, учитывая что
- доступ к инстансу ПДО должен быть не только изнутри
- а вот конфиг держать в переменной класса нужно как рыбке зонтик
- кодировку при соеднинеии с базой
надо задавать, чтобы потом не плодить на тостере очередной пост, "у меня в базе вопросики записались"
- причем сразу правильную
-
самое главное - вежливо попросить РНР сообщать обо всех ошибках в запросах
- ну и заодно установить разные удобные опции
- пути
всегда должны быть
абсолютными
- сначала надо написать универсальный метод для выполнения запросов, а потом уже использовать его во всех остальных методах
- ненужный код не нужен
class DatabaseMysql
{
public $pdo;
public function __construct()
{
$options = [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
\PDO::ATTR_EMULATE_PREPARES => false,
];
$dbc = require(__DIR__.'/core/config/DbConfig.php');
$this->pdo = new \PDO(
"mysql:host={$dbc['db_host']};dbname={$dbc['db_name']};charset=utf8mb4",
$dbc['db_user'],
$dbc['db_pass'],
$options,
);
}
public function query(string $query, array $params = [])
{
$sth = $this->pdo->prepare($query);
$sth->execute($params);
return $sth;
}
public function insert(string $query, array $params)
{
$this->query($query, $params);
return $this->pdo->lastInsertId();
}
}
Хотя если честно, то я большого смысла в этом классе не вижу.
Меня бы устроило простое расширение класса PDO типа такого
class MyPDO extends PDO
{
public function run($sql, $bind = NULL)
{
$stmt = $this->prepare($sql);
$stmt->execute($bind);
return $stmt;
}
}
Да, вставка будет выполняться за две строчки, а не одну,
$pdo->insert('INSERT INTO test_table (`name`, `age`) VALUES (?,?)', ['Ivan',43]);
$id = $pdo->lastInsertId();
но я не уверен что стоит городить целый класс из-за одной строчки.