Невозможно использовать try catch для функций вставки / обновления mysql - PullRequest
0 голосов
/ 03 июня 2019

У меня есть три функции (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: Если я заменю «сохранить» на «обновление», то оно будет обновлено в базе данных. Но попробуйте поймать "сохранить" не работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...