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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

5550閲覧

同じファイル上において、複数のSQL構文を正常に動作させるには。

Shinog

総合スコア99

MySQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/09/07 13:47

はじめまして!
同じファイル上において、複数のテーブルにデータを追加したいと考えています。

そこで複数のSQL構文を実装させる方法をとろうとしているのですが、変数($dbh, $stmt, $data...)が同じ関係か上手くいきません。

このような場合どのような処置をとればよいでしょうか?
またもし他の方法があれば教えてください。

是非ともご教授のほどよろしくお願い申し上げます。

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

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

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

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

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

guest

回答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

t-sagiri

総合スコア31

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

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

Shinog

2015/09/09 14:32

詳しいご回答ありがとうございます! 上記の方法で無事解決できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問