2012-03-08 7 views
1

私の以前の質問に対する解決策を探しています私は奇妙な事実を知りました - マルチクエリを使ったPDO prepare()トランザクション。あなたは警告も例外も何もない - 無音とコミット/ロールバックなし。PDOバグ:マルチクエリを使用したprepare()はトランザクション内では機能しません

さらに、最初のクエリ以外のクエリの一部にエラーがある場合でも例外はありません。最初のクエリにエラーが含まれている場合、期待どおりに例外が発生します。

トランザクションがない場合は、すべて正常に動作します。

単一のトランザクション内に複数のprepare()文(1つのクエリで1つずつ)を置くと、すべて正常に動作します。

私は、マルチクエリでプリペアドステートメントをサポートしていないことを読んだことがありますが、PDOはデフォルトで実際のMySQLプリペアドステートメントを処理せず、それらをエミュレートするだけです。

私はこの問題を説明している文書を検索しようと一日を費やしましたが、失敗しました。

本当にPDOのバグかどうかは誰にも分かりますか?

+0

*報告された「本当のMySQLを扱っていないデフォルトではPDO文を準備するだけで、それらをエミュレートし、」* - いいえ、PDO *抄録*一般的な構文にパラメータ処理します。基本となるDBエンジン(MySQLでも他のものでも)は、使用しようとしている機能を引き続きサポートする必要があります。 – Tomalak

+0

@Tomalak:実際にOPが正しい - PDOは準備をエミュレートする。 「基礎となるDBエンジンは、使用しようとしている機能をまだサポートしている必要があります。 – zerkms

+1

ご意見ありがとうございます。私は適切な用語を使用していないかもしれませんが、問題はまだ存在します - 複数のクエリを持つprepare()はトランザクション内では機能しません。トランザクション内ではないときに動作します。 – Placido

答えて

1

この動作は、実際には一部のバージョン(PHP 5.4.6-UbuntuおよびPHP 5.4.19-Windowsでテスト済み)のバグです。

この問題に関するドキュメントはありません。唯一の回避策は、複数のプリペアドステートメントを使用することです。

ただバグ https://bugs.php.net/bug.php?id=65994

関連する問題