はじめまして!
同じファイル上において、複数のテーブルにデータを追加したいと考えています。
そこで複数のSQL構文を実装させる方法をとろうとしているのですが、変数($dbh, $stmt, $data...)が同じ関係か上手くいきません。
このような場合どのような処置をとればよいでしょうか?
またもし他の方法があれば教えてください。
是非ともご教授のほどよろしくお願い申し上げます。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
仮に3つのINSERT INTO文を実行しなきゃいけないとして、
1つ目や2つ目まで成功して3つ目で失敗するなどの可能性も想定して、
データベースとの接続はトランザクション処理をするというのが前提になります。
(既知でしたらすみません。)
参考:PDOでMysqlのトランザクション処理 | スターフィールド株式会社
http://sterfield.co.jp/programmer/pdo%E3%81%A7mysql%E3%81%AE%E3%83%88%E3%83%A9%E3%83%B3%E3%82%B6%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E5%87%A6%E7%90%86.html
投稿2015/09/08 02:45
退会済みユーザー
総合スコア0
0
ベストアンサー
「同じファイル上で」という部分は、1つのPHPファイル上でDBへデータを追加する処理が複数連なっている、という事でしょうか?
上記の前提で考えると、DBへ接続~切断の間にINSERT文を作って実行、INSERT文を作って実行…ができれば良さそうでしょうか。
1からコードを考えるのは面倒なので、以下のサイトのコードを利用して考えますと、
http://www.phpbook.jp/tutorial/mysql/index7.html
以下の様な感じでしょうか?
php
1// mysql接続 2$link = mysql_connect('localhost', 'testuser', 'testuser'); 3if (!$link) { 4 die('接続失敗です。'.mysql_error()); 5} 6 7print('<p>接続に成功しました。</p>'); 8 9// insert 実行 10$sql = "INSERT INTO shouhin (id, name) VALUES (1, 'プリンター')"; 11$result_flag = mysql_query($sql); 12 13if (!$result_flag) { 14 die('INSERTクエリーが失敗しました。'.mysql_error()); 15} 16 17$sql = "INSERT INTO shouhin (id, name) VALUES (2, 'スキャナ')"; 18$result_flag = mysql_query($sql); 19 20if (!$result_flag) { 21 die('INSERTクエリーが失敗しました。'.mysql_error()); 22} 23// ...他にもinsert実行したければ、同じような処理を書くとか何とか… 24// insert実行終了 25 26$close_flag = mysql_close($link); 27 28if ($close_flag){ 29 print('<p>切断に成功しました。</p>'); 30} 31
insertを複数実行することが分かりやすいように、敢えてinsert実行処理部分は同じようなコードを書いてます。この例と同じことはもっとスッキリ書くことができそうですが、それはまた別のお話なので、割愛。
もう一つの方法としては、MySQLでしたら一文一文セミコロンで区切ればできるかもしれないですね。
php
1$sql = "INSERT INTO shouhin (id, name) VALUES (1, 'プリンター');INSERT INTO shouhin (id, name) VALUES (2, 'スキャナ')";
単純に実装するだけなら、こんなところかと。
仕様面で、注意したいのは、仕様面で一回のリクエストで複数データを入れることによって、一方のinsertが失敗したあとに何らかの問題が起きて、もう一方がinsertされないこともありえます。仕様によっては、どちらか欠けるとデータ齟齬が起きて、システムとして一貫性が保てず、システムが動かないこともありえます。その場合、一方が失敗したら、もう一方の処理は続行させたくない、といった措置も必要ですね。
また、「変数($dbh, $stmt, $data...)」については、それぞれの変数がどういった役割で使われているのかわかりませんでした。なので、これらの変数を使った回答はいたしておりません。
投稿2015/09/07 14:35
総合スコア31
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。