2012-04-22 14 views
8

MySQLのドキュメントでは、トランザクションの後mysql_affected_rowsの使用についての注意事項がありますコミット: http://php.net/manual/en/function.mysql-affected-rows.phpPDOStatement :: rowCountはPDO :: commitの後に使用すると結果を返しますか?

注:取引
トランザクションを使用している場合は、にmysql_affected_rowsを(呼び出す必要があります)後COMMITの後ではなく、INSERT、UPDATE、またはDELETE問合せ。 PDOオブジェクトを使用しているときhttp://www.php.net/manual/en/pdostatement.rowcount.php

が、これは、影響を受けた行がINSERT、UPDATE後にカウントまたはDELETEクエリが影響することはありませんコミットどういう意味:

しかし、PDOStatement::rowCountドキュメントには、このようなメモがありませんか?

+0

コミット後、 'affected_rows'の意味が不明瞭になります。 ENTIREトランザクションの影響を受ける行の総数ですか?または、トランザクション内の最後の操作を実行した行の数だけですか? –

+0

@MarcBそれは、 'PDOStatement-> rowCount()'で、つまり 'PDO-> rowCount()ではない、ということです。ロールバックされたネストされたトランザクションがあれば、したがって、最後のトランザクションではなく最後のクエリを行カウントするべきです(SHOULD)。 – Ozzy

+0

mysql_affected_rows()は、PDOStatement-> rowCount()を実行する別の方法です。 両方を実行できるのは、MySQLが完了した後だけです。そうしないと、影響を受ける行が存在しないためです。 –

答えて

12

実行されるクエリごとにPDOStatementが返されます。コード内のいつでもPDOStatement-> rowCount()を使用することができます(トランザクション中およびトランザクション終了後、ロールバック/コミットは関係ありません)。各オブジェクトは、それ自体を維持管理します。

なぜmysql_affected_rowsにそのトランザクションノートがあるのは、単一のmysql接続リソースしか認識していないためです。つまり、トランザクションを完了すると(コミット/ロールバック)、新しいクエリがDBに送信され、影響を受ける行の数に対して処理される結果が変更されます。

関連する問題