Эй, у меня есть вопрос к вам, ребята. Если я реализую свою вставку sql mysql в try catch, это предотвратит выполнение только частичного INSERT в базу данных, если один из них не сработает?
try { //SQL INSET TABLE 1 //SQL INSET TABLE 2 //SQL INSET TABLE 3 //SQL INSET TABLE 4 } catch(Exception $e) {...}
Я хотел бы отказать всем или принять все. Разве это так?
Что касается вашего комментария. Я использую PDO. Я был бы признателен за пример конфигурации, который позволит это.
В ваших комментариях вы часто рекомендуете транзакцию и откаты. Может ли кто-нибудь привести пример с некоторыми комментариями к коду? Икс
Я также хотел бы знать, есть ли альтернативные способы достижения этого эффекта.
@ РЕШЕНИЕ НАЙДЕНО: примеры транзакций PHP + MySQL :
try { // First of all, let's begin a transaction $db->beginTransaction(); // A set of queries; if one fails, an exception should be thrown $db->query('first query'); $db->query('second query'); $db->query('third query'); // If we arrive here, it means that no exception was thrown // ie no query has failed, and we can commit the transaction $db->commit(); } catch (Exception $e) { // An exception has been thrown // We must rollback the transaction $db->rollback(); }
Обратите внимание, что с этой идеей, если запрос не выполняется, необходимо исключить Исключение:
PDO может это сделать, в зависимости от того, как вы его настраиваете. См. PDO :: setAttribute и PDO :: ATTR_ERRMODE и PDO :: ERRMODE_EXCEPTION еще, с некоторым другим API, вам, возможно, придется проверить результат функции, используемой для выполнения запроса, и сделайте исключение самостоятельно.
К сожалению, магии нет. Вы не можете просто поместить инструкцию где-нибудь и выполнить транзакции автоматически: вам все равно нужно указать, какая группа запросов должна быть выполнена в транзакции.
Например, довольно часто у вас будет несколько запросов перед транзакцией (до начала) и еще одна пара запросов после транзакции (после фиксации или откат), и вы захотите, чтобы эти запросы выполнялись независимо от того, что произошло (или не) в транзакции.
ДРУГОЙ ПОЛЕЗНАЯ ССЫЛКА: транзакции PHP PDO?