Из таблицы mysql сначала хотите удалить строку. Только после удаления строки я хочу выбрать сумму (определенный_колонку). Хочу быть уверенным, что до тех пор, пока строка не будет удалена, я не выполню select.
Решили использовать такой код, как этот:
try{
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$db->beginTransaction();
try{
$stmt_delete = $db->prepare('DELETE FROM `table` WHERE `Id` = 1;');
$stmt_delete_items->execute( );
}
catch (PDOException $e){
echo "DataBase Error: " .htmlspecialchars( $e->getMessage() , ENT_QUOTES, "UTF-8").'<br>';
$db->rollBack();
exit;
}
try{
$stmt_select = $db->prepare('SELECT SUM(`Quantity`) AS `SumQuantity` FROM `table` WHERE `some_column` = 234;');
$stmt_select->execute( );
$arr_select = $stmt_select->fetchAll(PDO::FETCH_ASSOC);
}
catch (PDOException $e){
echo "DataBase Error: " .htmlspecialchars( $e->getMessage() , ENT_QUOTES, "UTF-8").'<br>';
}
$db->commit();
}
Ожидаем сначала выполнить $stmt_delete
и только потом $stmt_select
. В обычном случае я получаю такой порядок исполнения. Но гарантировано ли это 100%? Где-то читал, что удаление может занять больше времени, чем выбор ... с exit;
я предотвращаю следующее выполнение только в случае ошибки. Но мне нужно отложить $stmt_select
до $stmt_delete
.
Или может быть лучше использовать START TRANSACTION; ... COMMIT;
. Или может DELETE
использовать LOCK TABLES ... UNLOCK TABLES
.
Пожалуйста, советуйте решению быть на 100% уверенным, что select выполняется только после завершения удаления.