Я хотел бы сделать исключение, если есть только предупреждение mysql, а не ошибка.Ошибка броска на mysql warning pdo
В моем случае должно быть исключение, если пользователь попытается изменить поле amount
на отрицательное значение. (amount
является целым числом без знака)
try {
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->pdo->beginTransaction();
$upd = $this->pdo->prepare("
UPDATE Item set amount=amount-:amount where id = :itemID
");
$upd->bindValue(":amount", $amount);
$upd->bindValue(":itemID", $itemID);
$upd->execute();
} catch (Exception $e) {
$this->pdo->rollBack();
}
это не работа ПДО. Обычно вы используете ограничение, но mysql не поддерживает их, поэтому вам нужно будет поместить триггер в таблицу и не выполнить запрос, если сумма будет отрицательной. что или вам нужно ПОЛУЧИТЬ значение, проверить результат самостоятельно на клиентском коде и просто не запускать обновление, что также открывает дверь в условия гонки. –
Есть ли способ получить предупреждающее сообщение? Является ли разумным запустить запрос 'Show warnings'? – Wikunia
нет. это злоупотребление системой предупреждений php. предупреждения относятся к проблемам на уровне кода, а не к управленческим/логистическим проблемам. –