С PDO, как я могу убедиться, что выражение UPDATE прошло успешно?

Кажется, что для оператора INSERT можно использовать if (isset($connect->lastInsertId())), чтобы проверить, был ли оператор INSERT успешным. (Пожалуйста, поправьте меня, если я ошибаюсь.)

Но для оператора UPDATE, как я могу узнать, успешно ли он?

Например, у меня есть базовое:

$statement=$connect->prepare("UPDATE users SET premium='1' WHERE userid=?");
$statement->execute(array($id));

Большое спасибо. Отношения

Ответы

Ответ 1

Это зависит от того, что вы подразумеваете под "успешным". Если вы имеете в виду, что запрос выполняется без сбоев, то 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));

чтобы отключить это неожиданное поведение.

Ответ 2

$stmt->execute();
$count = $stmt->rowCount();

if($count =='0'){
    echo "Failed !";
}
else{
    echo "Success !";
}