Кажется, что для оператора INSERT можно использовать if (isset($connect->lastInsertId()))
, чтобы проверить, был ли оператор INSERT успешным. (Пожалуйста, поправьте меня, если я ошибаюсь.)
Но для заявления UPDATE, как я могу узнать, было ли это успешным?
Например, у меня есть базовый вариант:
$statement=$connect->prepare("UPDATE users SET premium='1' WHERE userid=?"); $statement->execute(array($id));
Заранее большое спасибо. С уважением
Это зависит от того, что вы подразумеваете под «успешным». Если вы имеете в виду, что запрос выполняется без сбоев, тогда PDO
либо выдаст исключение при ошибке, либо вернет FALSE
из PDOStatement::execute()
, в зависимости от того, какой режим ошибок вы установили, поэтому «успешный» запрос в этом случае будет просто быть тем, в котором метод execute не возвращал FALSE
или не выдавал исключение.
Если вы имеете в виду «успешный» в том, что на самом деле были обновлены строки (в сравнении с обновленными только 0 строками), вам нужно будет проверить, что с помощью PDOStatement::rowCount()
, которая сообщит вам количество затронутых строк из предыдущего запроса ,
Предупреждение. Для обновлений, где newvalue = oldvalue
PDOStatement::rowCount()
возвращает ноль. Вы можете использовать
$p = new PDO($dsn, $u, $p, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));
чтобы отключить это неожиданное поведение.
$stmt->execute(); $count = $stmt->rowCount(); if($count =='0'){ echo "Failed !"; } else{ echo "Success !"; }