У меня есть три функции (insert-> для вставки данных в базу данных, update-> для обновления данных и сохранения-> он использует try catch)
function save($record,$pk)
{
try{
$this->insert($record);
}
catch(Exception $e)
{
$this->update($record,$pk);
}
}
function insert($record) {
global $pdo;
$keys = array_keys($record);
$values = implode(', ', $keys);
$valuesWithColon = implode(', :', $keys);
$query = 'INSERT INTO ' . $this->table . ' (' . $values . ') VALUES (:' . $valuesWithColon . ')';
$stmt = $pdo->prepare($query);
$stmt->execute($record);
}
function update($record,$pk)
{
global $pdo;
$parameters=[];
foreach ($record as $key => $value) {
$parameters[]=$key .'= :'. $key;
}
$list=implode(', ',$parameters);
$query="UPDATE $this->table SET $list WHERE $pk=:pk";
$record['pk']=$record[$pk];
$stmt=$pdo->prepare($query);
$stmt->execute($record);
}
функция вставки и обновления работает правильно. Я хочу использовать функцию сохранения, чтобы вставить данные, если они не существуют, и заменить данные, если существует такой же PK.
Мой код для вставки:
if(isset($_POST['save'])){
unset($_POST['save']);
$department->save($_POST,'id');
}
Проблема в том, что если нет повторяющегося значения, оно вставляется в базу данных. Но если есть повторяющееся значение (PK), оно не обновляется в базе данных.
Мой массив содержит
Array
(
[id] => 1
[title] =>test
[description] =>description
)
Отображается пустым, когда я пытаюсь обновить через форму.
P.S: Если я заменю «сохранить» на «обновление», то оно будет обновлено в базе данных. Но попробуйте поймать "сохранить" не работает