Выполнить второй оператор только после завершения первого оператора - PullRequest
0 голосов
/ 03 октября 2019

Из таблицы 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 выполняется только после завершения удаления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...