質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

592閲覧

Mysql2で複文(MULTI_STATEMENTS)利用時のループ処理

no1knows

総合スコア3365

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2018/02/24 03:15

編集2018/02/25 21:01

解決したいこと

RubyのMysql2で複文のループ処理を行いたいのですが、エラーがでてしまいます。

問題切り分けでおこなったこと

下記ではエラーが出ませんでした。

・ループ処理がない ⇒基本的なプログラムはきちんとできている。

・insert intoの1文だけでループ処理 ⇒ ループ処理もきちんとできている。

下記ではエラーがでました。

・insert intoとsetの2文でループ処理 ⇒ 下記と同様のエラーが表示されました。

表示されるエラー

ruby

1/Users/no1knows/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/mysql2-0.4.10/lib/mysql2/client.rb:120:in `_query': Commands out of sync; you can't run this command now (Mysql2::Error) 2 from /Users/no1knows/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/mysql2-0.4.10/lib/mysql2/client.rb:120:in `block in query' 3 from /Users/no1knows/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/mysql2-0.4.10/lib/mysql2/client.rb:119:in `handle_interrupt' 4 from /Users/no1knows/.rbenv/versions/2.4.3/lib/ruby/gems/2.4.0/gems/mysql2-0.4.10/lib/mysql2/client.rb:119:in `query' 5 from test.rb:48:in `block in <main>' 6 from test.rb:32:in `each' 7 from test.rb:32:in `<main>'

実行したプログラム

ruby

1#▼設定データ▼ 2client = Mysql2::Client.new( 3 :username => 'root', 4 :password => 'root', 5 :host => '127.0.0.1', 6 :database => "something", 7 :flags => Mysql2::Client::MULTI_STATEMENTS 8) 9#▲設定データ▲ 10 11for num in 1..2 do 12 13query = %{ 14 insert into posts (content, title) values ('(本文)' , '(タイトル)'); 15 set @post_id = last_insert_id(); 16 update posts set title = '(本文2)' where id = @post_id; 17} 18 19results = client.query(query) 20 21end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

複文を使う場合、store_resultを呼ぶ必要がありそうです。
Mysql2::Client で複数のSQL文を実行したい
※. yasuさんの回答を参照してください。

投稿2018/02/24 23:41

unz.hori

総合スコア1057

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

no1knows

2018/02/25 21:01

ご返答ありがとうございます。 確認したところstore_resultは、クエリの内容を呼び出すときに利用するようで、今回の複文をループ処理ではうまく動きませんでした。 ただこれをきっかけに、改めてシンプルに考えることができ  ✕ 「複文⇒クエリ」をループ ではなく  ◯ 「複文」をループ⇒クエリ とまとめることでうまく実行できました!
unz.hori

2018/02/26 00:57

まぁ、きっかけになっただけでも。解決して良かったです。
no1knows

2018/02/26 01:29

はい、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問