みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

CGIとMysqlで複数のupdate文を実行したい

CGI(Perl5.8*)のDBIモジュールでのMysqlの質問です。

////////////////////////////////////////////
$sql = "
update `postageFee` set `aaa`=1,`bbb`=2 where `id`=1;
update `postageFee` set `aaa`=3,`bbb`=4 where `id`=5;
";
$result = $db->prepare("$sql");
$result->execute;
$result->finish;
////////////////////////////////////////////
上記のように複数行にわたるupdate文を一回のQueryで処理させたいのです。
上記のような方法で一回で処理はできないのでしょうか?どうしてもうまくいきません。
1行1行クエリーしないといけないのでしょうか?

よろしくお願いします。

投稿日時 - 2009-03-15 00:55:22

QNo.4797586

困ってます

質問者が選んだベストアンサー

> 上記のように複数行にわたるupdate文を一回のQueryで処理させたいのです。

それはできないです。

> 行1行クエリーしないといけないのでしょうか?

そういうことです。

ただ、1回、1回同じようなSQLを解析させるとオーバーヘッドが高くなるので、形が同じでリテラルだけが異なるようなSQLを何度も発行する必要がある場合はprepared statementというものがよく使われます。

すると、こんな感じになるでしょう。

$sql = "update postageFee set aaa=? ,bbb=? where id = ?";
$result= $dbh->prepare($sql);

$result->bind_param(1, 1);
$result->bind_param(2, 2);
$result->bind_param(3, 1);
$result->execute;

$result->bind_param(1, 3);
$result->bind_param(2, 4);
$result->bind_param(3, 5);
$result->execute;

投稿日時 - 2009-03-15 13:08:54

お礼

早速の返信ありがとうございます。

やはり、一回ですべきなんですね。

助かりました。

投稿日時 - 2009-03-16 10:51:53

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問