PHPで具体的なデータベースドライバーに独立して分離レベルを設定する方法はありますか? ないようです。
1 に答える
残念ながら、Zend_Db でそのようなことを行う方法があるかどうかはわかりません。マニュアルには、 Microsoft SQL Server アダプターsetTransactionIsolationLevel()
でのみ使用できると記載されています。
setTransactionIsolationLevel() を使用して、現在の接続の分離レベルを設定できます。値は、SQLSRV_TXN_READ_UNCOMMITTED、SQLSRV_TXN_READ_COMMITTED、SQLSRV_TXN_REPEATABLE_READ、SQLSRV_TXN_SNAPSHOT、または SQLSRV_TXN_SERIALIZABLE のいずれかです。
Zend_Db API は、トランザクション分離レベルを管理する方法を実装していないようです。唯一の方法は、独自の SQL ステートメントを記述し、使用している PDO ドライバーに従ってそれらを実行することです。
代わりに、 Doctrine (非常に強力)などのより優れたデータベース抽象化レイヤーを使用することをお勧めします。次に、この方法でそれを行うことができます:
には
Doctrine\DBAL\Connection
、基盤となるデータベースでサポートされているトランザクション分離レベルを制御するメソッドもあります。Connection#setTransactionIsolation($level)
そしてConnection#getTransactionIsolation()
、その目的のために使用することができます。可能な分離レベルは、次の定数で表されます。
<?php
Connection::TRANSACTION_READ_UNCOMMITTED
Connection::TRANSACTION_READ_COMMITTED
Connection::TRANSACTION_REPEATABLE_READ
Connection::TRANSACTION_SERIALIZABLE
Doctrine を ZF と統合する方法については、この質問を参照してください。Doctrineを使用したトランザクション管理の詳細については、このページを参照してください。