1

oci_execute()OracleのwithOCI_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を使用します。

だから私の質問は2つの部分です:

  • OCI_DEFAULTPHP <5.3.2の場合、何を表していましたか?
  • OCI_DEFAULTPHP> = 5.3.2で使用する場合の効果的なモードは何ですか?(つまり、上記のコード)

パート2に答える試みで、私はoci_execute_mode()デバッグのために見つけることを望んでいました。ただし、AFAIKのような関数は存在しません。スクリプトを実行すると、PHPスクリプトが正常に終了したとき(つまり、接続が閉じられたとき)にコミットしているように見えます。

4

2 に答える 2

4

PHP <5.3.2の場合、OCI_DEFAULTは何を表していましたか?

ドキュメントはあなたの最初の質問に答えます。

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_NO_AUTO_COMMITのエイリアスであるOCI_DEFAULTを使用していました。

簡単な答え: "OCI_DEFAULT <PHP 5.3.2"="OCI_NO_AUTO_COMMITと同じ>=PHP 5.3.2"="現在実行中のステートメントを自動的にコミットしないでください。"

PHP> = 5.3.2でOCI_DEFAULTを使用する場合の有効なモードは何ですか?(つまり、上記のコード)

下位互換性を維持するために、<5.3.2で行ったのと同じことを行います。現在は廃止/非推奨になっています。OCI_DEFAULTまたはOCI_NO_AUTO_COMMITのいずれかを使用できますが、永遠に存在しない可能性があるため、後者を使用する必要があります。

于 2013-01-11T16:25:30.987 に答える
0

Webサーバーは、COMMITコマンドを手動または自動で待たずに、自動的にコミットする必要があります。相互に依存するSQLクエリのグループを使用してトランザクションを処理する場合は、必要に応じてCOMMITまたはROLLBACKを適用できるビジネスレイヤーまたはストアドプロシージャでこれらのSQLクエリを処理することをお勧めします。

編集:

PHP <5.3.2の場合、OCI_DEFAULTは何を表していましたか?

接続を閉じると、OCI_DEFAULTは自動的にロールバックします。トランザクションをコミットするには、明示的にoci_commit()を呼び出す必要がありました。

PHP> = 5.3.2でOCI_DEFAULTを使用する場合の有効なモードは何ですか?

以前のバージョンには、OCI_COMMIT_ON_SUCCESSとOCI_DEFAULTのみが含まれていました。新しいバージョンでは、OCI_DEFAULTはOCI_NO_AUTO_COMMITの単なるエイリアスです。以前は、OCI_DEFAULTはその目的について混乱を招きました。OCI8 1.4は、OCI_DEFAULTの名前を変更することにより、新しいモードOCI_NO_AUTO_COMMITを追加しました。OCI_DEFAULTとOCI_NO_AUTO_COMMITの間に内部パフォーマンスの違いはありません。

于 2013-01-11T15:48:12.363 に答える