2012-01-02 6 views
0

私は何か間違っているかもしれませんが、なぜ、どのように理解できません。PHPでmysql自動コミットを無効にしてもうまくいきません

PHPスクリプトで自動コミットを無効にしたいと考えています。これは私の個人的なPHPのmysqlフレームワークがそのように動作するためです。まだ何らかの形で自動コミットをオフにすることはできません。私はエンジン= InnoDBテーブルでMysqliを使用しています。私はmysqli :: autocommit機能とグローバルとセッション用のmysql文を試しました。

すべてが同じ結果になります。自動コミットはまだオンです。誤った文を使用したというエラーは返されません。クエリはtrueを返し、コミットしようとしましたがtrueを返します。

私はここで何かが欠けていますか?自動コミットは、それが実行されるホストが、私は、サーバーの設定でそれを無効にすることはできませんので、:)デフォルトで

+0

いくつかの状況で私のために働いた - これのためのコードを共有することはできますか?どのようにトランザクションをセットアップ/開始しますか?コマンドを実行する前に、実際にトランザクション中であることをどのように確認していますか? – pagid

+0

'start transaction;'クエリを実行しようとしましたか? –

+0

まあ、現在、私はautocommitをオフにしていますが、自動コミットの値は0だと言われていますが、それでも挿入クエリは何とかコミットされています。 @pageid、私はすべて自動コミットをオフにして、挿入クエリを実行し、実際には挿入を行う私のsave($ commit = false)関数を実行するsavepoint関数を実行します。奇妙なことは、mysqli_commitを使用している唯一の機能はsaveです... –

答えて

1

http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_autocommit

ランタイムをオフにする必要があり、クライアント接続は1.にautocommitセットで始まります0のデフォルトそもそも原因クライアントは、サーバのinit_connectシステム変数を設定します。

SET GLOBAL init_connect='SET autocommit=0'; 

init_connect変数は、コマンドラインまたはオプションファイルで設定することができます。ただ、オプションファイルを使用して示すように、変数を設定するには、これらの行が含ま:

[mysqld] 
init_connect='SET autocommit=0' 

はまた、次の linkを表示し、正常に/オフにして示しているかどうかをコミットしますブール値を返す方法があります。

また、@@autocommitを使用して、自動コミットの現在の状態を判断します。

+0

自動コミットがオフです。私は愚かであり、クエリ結果を取得しませんでした;)。しかし、私は間違いなく挿入クエリを実行している間、すべての挿入クエリがコミットされているし、決してmysqli_commitです。私もあなたのinit_connectの提案を試みたが、うまくいかなかった! –

0

あなたのおかげで、私は問題を解決しました!私は何らかの形で、ロールバックを明示的に行わないか、接続を閉じると、挿入がコミットされることを理解しました。 register_shutdown_functionを使用すると、ロールバックを実行したり、接続を閉じることができます。

もう一度、ありがとうございます!

+0

あなたの答えを受け入れるように設定することを忘れないでください。または質問を編集して、適切な道にあなたを導いた人を受け入れられた答えとしてマークしてください。 – Skuld

関連する問題