PHP и транзакции PostgreSQL?

Давным-давно я написал класс php, который обрабатывает соединения postgresql db.
Я добавил транзакции к моим функциям вставки / обновления, и это работает отлично для меня. Но недавно я узнал о функции «pg_prepare».
Я немного смущен тем, что делает эта функция, и если будет лучше переключиться на нее.

В настоящее время всякий раз, когда я делаю вставку / обновление, мой sql выглядит так:

$transactionSql = "PREPARE TRANSACTION ".md5(time()).";" .$theUpdateOrDeleteSQL.";". ."COMMIT;"; This will return something like: PREPARE TRANSACTION '4601a2e4b4aa2632167d3cc62b516e6d'; INSERT INTO users (username,g_id,email,password) VALUES('test', '1', 'test','1234'); COMMIT; 

Я структурировал свою базу данных с отношениями, и я использую (когда это возможно):

  ON DELETE CASCADE ON UPDATE CASCADE 

Но я хочу быть на 100% уверенным, что в базе данных все чисто, и при обновлении / удалении или вставке нет остатков, если / когда есть сбой.

Было бы неплохо, если бы вы могли поделиться своим мнением / опытом о pg_prepare, мне действительно нужно «подготовить транзакцию» и любые другие дополнения, которые могли бы мне помочь? 🙂

Related of "PHP и транзакции PostgreSQL?"

Нет, вам не нужна подготовка транзакции (предназначенная для распределенных транзакций на разных серверах, как уже указывал Милен).

Я не уверен, как это работает с интерфейсом PHP, но до тех пор, пока вы можете убедиться, что вы не работаете в режиме автоматической фиксации, все должно быть хорошо.

Если вы не можете управлять режимом автоматической фиксации, просто поместите свои заявления в блок BEGIN … COMMIT

Нет, вам не нужна 2-х фазовая фиксация! …

Для безопасной обработки баз данных PHP не используйте pg_query напрямую, а переносите ее в специальную функцию, которая выполняет следующие действия:

  • открывает соединение с базой данных по первому запросу
  • при использовании постоянных соединений убедитесь, что соединение находится в известном состоянии
  • register_shutdown_function к функции, которая выдает ROLLBACK
  • убедитесь, что autocommit выключен, или просто введите BEGIN перед первым запросом
  • ошибка базы данных журнала и медленные запросы
  • использует только pg_query_params (), который хорошо заботится о инъекциях sql

Таким образом, если ваш скрипт сработает или что-то еще, откат будет выдаваться автоматически. Вы можете совершать транзакции только путем явного ввода.

Если вы используете постоянные подключения, будьте осторожны: обработка php pg_pconnect немного … ошибка.