2016-01-18 2 views
0

Я хотел бы сделать исключение, если есть только предупреждение 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(); 
} 
+0

это не работа ПДО. Обычно вы используете ограничение, но mysql не поддерживает их, поэтому вам нужно будет поместить триггер в таблицу и не выполнить запрос, если сумма будет отрицательной. что или вам нужно ПОЛУЧИТЬ значение, проверить результат самостоятельно на клиентском коде и просто не запускать обновление, что также открывает дверь в условия гонки. –

+0

Есть ли способ получить предупреждающее сообщение? Является ли разумным запустить запрос 'Show warnings'? – Wikunia

+1

нет. это злоупотребление системой предупреждений php. предупреждения относятся к проблемам на уровне кода, а не к управленческим/логистическим проблемам. –

ответ

0

использование

$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 

см: http://php.net/manual/en/pdo.setattribute.php

+0

, но это вызывает только предупреждение, но не генерирует исключение 'PDO :: ERRMODE_WARNING: Raise E_WARNING.' – Wikunia

Смежные вопросы