Используя Doctrine DBAL, как определить ошибку обновления? - PullRequest
1 голос
/ 15 марта 2012

В настоящее время я использую библиотеку Doctrine DBAL для взаимодействия с MySQL и в настоящее время построил структуру вокруг:

public function update(array $data, $id)
{
    return $this->db->update($this->table, $data, array('id' => $id));
}

, которая, конечно, возвращает количество затронутых строк.Теперь проблема в том, что после обновлений я выполняю определенные действия, которые должны срабатывать при успешном обновлении.В текущей системе, если я должен был «отредактировать» запись (показывая только форму) и сразу нажать «Сохранить», это возвращает ошибку, так как я проверяю результат функции обновления выше.Это не только отображает ошибку на моем сайте, но и предотвращает запуск других действий «успешного обновления».

Есть ли способ узнать, не удалось ли выполнить обновление за пределами затронутых строк?Могу ли я просто полностью проигнорировать это и предположить, что обновление будет работать всегда?Будет ли ловушек Исключений достаточно, чтобы поймать любые фатальные ошибки?

Ответы [ 3 ]

1 голос
/ 15 марта 2012

Вы можете предположить, что обновления по большей части работают, но вы, вероятно, захотите изучить Транзакции , они являются лучшим способом обработки исключений и поддержания целостности БД, если что-то пойдет не так.PHP не предоставляет традиционных способов восстановления после фатальных ошибок по причинам, изложенным в этих ответах .

1 голос
/ 27 мая 2017

В текущей системе, если мне нужно было «отредактировать» запись (показывая только форму) и сразу нажать «Сохранить», она возвращает ошибку, поскольку я проверяю результат функции обновления выше

Не забывайте, что $this->db->update() возвращает количество затронутых строк (или false при сбое).Если вы просто откроете «Изменить» и нажмете «Сохранить», данные не будут изменены, а «затронутые строки» будут равны 0. Чтобы вернуть успех или неудачу $this->db->update(...), вы можете использовать false !==

if ($myModel->update($data, $id)) {
    echo "success";
}

и в вашей myModel:

public function update(array $data, $id)
{
     return false !== $this->db->update(...);
}
1 голос
/ 15 марта 2012

Можно предположить, что обновление будет работать всегда. Исключения будут выброшены для серьезных проблем, таких как неправильные имена полей или нарушения ограничений. Попробуйте сделать несколько тестовых случаев, чтобы убедиться в этом.

Имейте в виду, что с помощью метода update () экранирование не выполняется, поэтому вы можете очистить свои данные.

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