Я столкнулся с некоторым устаревшим кодом, используя 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-скрипта (т. Е. Когда соединение закрыто).
Что представляет 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 нет внутренней разницы производительности.