2009年11月13日

[mysql 15064] Re: "Commands out of sync"エラー

とみたです。

On Fri, 13 Nov 2009 01:06:24 +0900
"YAMAKITA, naomichi" <yamakita@xxxxx> wrote:

> MySQL 5.1でクライアントライブラリを作成しているのですが、
> クエリを発行後、稀に"Commands out of sync; you can't run this
> command now"

> というエラーが発生する場合があります。
>
> 何が原因か調べていたところ、
>
> 1.クエリAを発行:mysql_real_query()
> 2.Aの結果セットを取得:mysql_use_result()
> 3.Aの結果セットを解放:mysql_free_result()
>
> 2や3の処理が行われる前にクエリBが発行されたタイミ
> ングで発生するようです。
> エラーの内容は分かるのですが、どのように対応すれば良いのか
> いまいち対策が分かりませんでした。
> 2-3の間をロックする、といった手法になるのでしょうか。

mysql_real_query() の後は mysql_store_result() を行うか、
mysql_use_result() & mysql_fetch_row() ですべての行を取り出すまで、他の
クエリを実行することはできません。

何の言語を使用しているのかわかりませんが、ライブラリ側で制御できないと
いうことは、マルチスレッドとかでしょうか。

おっしゃる通りロックするのが一番確実だと思います。ちょっと複雑な処理が
必要になりますが、プリペアドステートメントを使用するのもありかもしれま
せん。

--
とみたまさひろ <tommy@xxxxx>
日本MySQLユーザ会 http://www.mysql.gr.jp


投稿者 xml-rpc : 2009年11月13日 07:41
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/90378
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。