現在の位置: ホーム> 最新記事一覧> PDO ::イントランス作用は、トランザクションの開始時間と終了時間を制御できますか?正しく使用する方法は?

PDO ::イントランス作用は、トランザクションの開始時間と終了時間を制御できますか?正しく使用する方法は?

M66 2025-06-30

PHPでは、PDO(PHPデータオブジェクト)は、データベースにアクセスするための軽量で抽象的なデータベースアクセスレイヤーです。 PDOは、トランザクション処理をサポートする機能を含む複数のデータベース管理システムにアクセスするための一貫したAPIを提供します。トランザクションは、すべての成功またはすべてが失敗する一連の操作を指し、データの一貫性と整合性を確保します。

PDO :: Intransaction()は、現在のデータベース接続がトランザクションにあるかどうかをチェックするPDOクラスの方法です。トランザクションの状態情報を提供しますが、トランザクションの開始時間と終了時間を直接制御しません。この記事では、PDO :: Intransaction()の役割について詳しく説明し、トランザクション管理にPDOを正しく使用する方法を紹介します。

1。PDOの役割:: Intransaction()

PDO :: Intransaction()メソッドは、現在のデータベース接続がトランザクションを受けているかどうかを示すブール値を返します。具体的には、 Transaction()は、トランザクションが開始されたが、コミットまたはロールバックされてない場合にtrueを返します。

使用例:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);

</span><span><span class="hljs-comment">// トランザクションにあるかどうかを確認してください</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">inTransaction</span></span><span>()) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"トランザクションが進行中です"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"現在、トランザクションは進行中です"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

この例では、現在トランザクションが進行中でない場合、出力は「現在、トランザクションが進行中ではない」になります。トランザクションが開始された場合、出力は「進行中のトランザクション」になります。

Intransaction()は、トランザクションがアクティブであるかどうかのみを伝えることに注意する必要がありますが、トランザクションを開始または終了しません。これは、単なる状態クエリメソッドです。

2。トランザクションを開始および終了する方法

トランザクションの開始と終了は、begintransaction()compid() 、およびrollback()メソッドによって制御されます。

  • begintransaction() :新しいトランザクションを開始します。

  • commit() :現在のトランザクションをコミットします。

  • Rollback() :ロールバック現在のトランザクション。

トランザクションの使用例:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);

</span><span><span class="hljs-comment">// トランザクションを開始します</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">beginTransaction</span></span><span>();

</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-comment">// データベース操作を実行します</span></span><span>
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">exec</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com')"</span></span><span>);
    
    </span><span><span class="hljs-comment">// すべてがうまくいけば,トランザクションを送信します</span></span><span>
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">commit</span></span><span>();
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"トランザクションの提出が成功しました"</span></span><span>;
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-comment">// エラーが発生したときにトランザクションをロールバックします</span></span><span>
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">rollBack</span></span><span>();
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"トランザクションロールバック,エラーメッセージ: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

この例では、 beginTransaction()はトランザクションを開始します。実行中にエラーが発生しない場合、トランザクションはcommit()を介して送信され、すべてのデータベース操作が最終的に保存されます。トランザクションで例外が発生した場合、ロールバック()を介してトランザクションをロールバックして、データベースが一貫していることを確認します。

3. PDO :: Intransaction()の使用方法正しく

PDO :: Intransaction()は、トランザクションの状態を検出するのに役立ちますが、通常、トランザクション状態のデバッグまたは条件付き判断に使用されます。たとえば、トランザクションが開始されたかどうかを確認し、取引を開始せずにコミットまたはロールバック操作を回避します。

例:複数の提出またはロールバックを避けてください

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'root'</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>);

</span><span><span class="hljs-comment">// トランザクションを開始します</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">beginTransaction</span></span><span>();

</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-comment">// データベース操作を実行します</span></span><span>
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">exec</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO users (name, email) VALUES ('Jane Doe', 'jane@example.com')"</span></span><span>);

    </span><span><span class="hljs-comment">// トランザクションが開始されているかどうかを確認してください,繰り返しの提出を避けてください</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">inTransaction</span></span><span>()) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"トランザクションが提出されました,再度送信できません"</span></span><span>;
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-comment">// トランザクションを送信します</span></span><span>
        </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">commit</span></span><span>();
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"トランザクションの提出が成功しました"</span></span><span>;
    }
} </span><span><span class="hljs-keyword">catch</span></span><span> (</span><span><span class="hljs-built_in">Exception</span></span><span> </span><span><span class="hljs-variable">$e</span></span><span>) {
    </span><span><span class="hljs-comment">// エラーが発生したときにトランザクションをロールバックします</span></span><span>
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">inTransaction</span></span><span>()) {
        </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">rollBack</span></span><span>();
    }
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"トランザクションロールバック,エラーメッセージ: "</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

この例では、 Intransaction()を使用して、トランザクションが開始されたかどうかを確認し、トランザクションがコミットされた場合に再度コミットしようとしないことを確認します。

4。pdo :: intransaction()の制限

  • PDO :: Intransaction()は、トランザクションが進行中であり、トランザクションの開始と終了を制御しないかどうかに関する情報のみを提供します。取引を開始またはコミットすることはできません。トランザクションのステータスのみを伝えることができます。

  • トランザクションは開発者によって制御されるプロセスであるため、 Intransaction()は、トランザクションが適切に管理されるようにする補助ツールとしてのみ使用されます。トランザクション制御メソッド( begintransaction()compid() 、およびrollback()など)を置き換えることはできません。

5。結論

PDO :: Intransaction()は、トランザクション管理においてヘルパーの役割を果たします。トランザクションの現在の状態を確認するために使用できますが、トランザクションの開始または終了を直接制御しません。実際の開発では、トランザクションのライフサイクルを管理するために、 begintransaction()commit() 、およびrollback()に依存する必要があります。 PDO :: Intransaction()は、取引操作の正確性を確保し、取引なしで操作を誤ってコミットまたはロールバックすることを避けるのに役立ちます。

PDOが提供するトランザクション方法とステータスチェックの正しい使用により、データベース操作、データの一貫性のセキュリティを確保し、潜在的なエラーを回避できます。

  • 関連タグ:

    PDO