Поведение Oracle oci_execute () с использованием OCI_DEFAULT для PHP> 5.3.2

Я столкнулся с некоторым устаревшим кодом, используя Oracle oci_execute() с флагом OCI_DEFAULT .

 oci_execute($this->result, OCI_DEFAULT); 

Однако на этом сервере теперь работает PHP> 5.3.2. Согласно документам PHP для OCI_DEFAULT :

Устаревший с PHP 5.3.2 (PECL OCI8 1.4), но по-прежнему доступен для обратной совместимости. В новом коде используйте эквивалент OCI_NO_AUTO_COMMIT.

Поэтому мой вопрос состоит из двух частей:

  • Что представляет OCI_DEFAULT для PHP <5.3.2?
  • Каков эффективный режим при использовании OCI_DEFAULT в PHP> = 5.3.2? (т.е. код выше)

В попытке ответить на часть 2 я надеялся найти oci_execute_mode() для отладки. Однако AFAIK таких функций не существует. Из запуска скрипта, похоже, он совершает успешный конец PHP-скрипта (т. Е. Когда соединение закрыто).

Solutions Collecting From Web of "Поведение Oracle oci_execute () с использованием OCI_DEFAULT для PHP> 5.3.2"

Что представляет OCI_DEFAULT для PHP <5.3.2?

Документы отвечают на ваш первый вопрос.

Устаревший с PHP 5.3.2 (PECL OCI8 1.4), но по-прежнему доступен для обратной совместимости. В новом коде используйте эквивалент OCI_NO_AUTO_COMMIT.

Тогда, если вы ищете OCI_NO_AUTO_COMMIT

Не автоматически фиксировать изменения. До PHP 5.3.2 (PECL OCI8 1.4) используйте OCI_DEFAULT, который является псевдонимом для OCI_NO_AUTO_COMMIT.

Краткий ответ: «OCI_DEFAULT <PHP 5.3.2» = «то же, что и OCI_NO_AUTO_COMMIT> = PHP 5.3.2" = "Не автоматически выполнять выполняемый оператор прямо сейчас."

Каков эффективный режим при использовании OCI_DEFAULT в PHP> = 5.3.2? (т.е. код выше)

Он делает то же самое, что и в <5.3.2, чтобы сохранить обратную совместимость – теперь он устарел или устарел. Вы можете использовать OCI_DEFAULT или OCI_NO_AUTO_COMMIT, но вы должны использовать последнее, потому что это может быть не навсегда.

Веб-сервер должен автоматически фиксировать, не дожидаясь команды COMMIT вручную или автоматически. Если вы хотите обработать транзакцию с группой взаимозависимых SQL-запросов, я считаю, что лучше всего обрабатывать эти SQL-запросы на бизнес-уровне или хранимую процедуру, где при необходимости могут применяться COMMIT или ROLLBACK.

Редактировать:

Что представляет OCI_DEFAULT для PHP <5.3.2?

OCI_DEFAULT автоматически откат при закрытии соединения. Чтобы совершить транзакцию, вам необходимо явно вызвать oci_commit ().

Каков эффективный режим при использовании OCI_DEFAULT в PHP> = 5.3.2?

Предыдущие версии имели бы только OCI_COMMIT_ON_SUCCESS и OCI_DEFAULT. В новой версии OCI_DEFAULT является просто псевдонимом для OCI_NO_AUTO_COMMIT. Ранее OCI_DEFAULT делал путаницу в отношении своей цели. OCI8 1.4 добавил новый режим OCI_NO_AUTO_COMMIT, переименовав OCI_DEFAULT. Между OCI_DEFAULT и OCI_NO_AUTO_COMMIT нет внутренней разницы производительности.