PHPからMySQL・異なるDBにコピーする方法

このQ&Aのポイント
  • PHPからMySQL・異なるDBに接続し同じ構造のテーブルのデータをコピーすることは可能ですか?
  • クエリが実行されず「コピーできません」が表示される問題が発生しています。
  • どのようにすればコピーできるか教えてください。
回答を見る
  • ベストアンサー

PHPからMySQL・異なるDBにコピー

PHPからMySQL・異なるDBに接続し同じ構造のテーブルのデータをコピーすることは可能ですか? 以下を実行するとクエリが実行されず「コピーできません」が表示されてしまいます。 どのようにすればコピーできるか教えてください。 $connect1 = mysql_connect("localhost", "user1", "pass1") ; mysql_select_db("db1", $connect1); //db1内にtable1 $connect2 = mysql_connect("localhost", "user2", "pass2") ; mysql_select_db("db2", $connect2); //db2.内にtable2 $sql = "INSERT INTO `db1` . `table1` SELECT * FROM `db2` .`table2`;"; $result = mysql_query($sql, $connect1)or die("コピーできません"); //$result内「$connect1」でも「$connect2」結果は同じです。 //table1とtable2の構造は同じです。

  • PHP
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5076/13258)
回答No.2

table2 からセレクトした値を配列に入れて置いて、table1に順番にインサートする。 mysql_select_db("db2", $connect2); を実行したら、MySQL関数群は $connect2 の db2 に対してクエリーを実行するので $connect1 の db1 にアクセスできません。

jpncan15
質問者

お礼

t_ohtaさん ありがとうございます。 一括コピーが出来ないので、教えていただいた通り「insert into table名(項目名1,項目名2) values ("データ内容1","データ内容2")」を件数分地道にやっていこうと思っています。 データ件数がそこそこあり、データをcsvで書き出すと7MBもあるので、時間がかかりそうですが。。 ありがとうございました。

その他の回答 (3)

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.4

とりあえず、phpMyAdminに投げてみただけですが、そちらの書き方で問題なくコピーされることは確認しました。 ↓ これ、$connect1 を決め打ちしてるのが原因ってことはないですかね? $result = mysql_query($sql, $connect1)or die("コピーできません"); ↓ こうしてみたら どんなもんになるでしょう? $result = mysql_query($sql)or die("コピーできません"); あとyambejpさんがご指摘の通りですが、SQL文の末尾のセミコロンは複数行を実行させようとしない限り、必要ありません。 ちなみに、サーバーが異なってたりはしませんよね?

jpncan15
質問者

お礼

bm_hiroさん ご回答ありがとうございます。 ご指摘の通りphpmyadminではコピーできたので問題なく出来ると思ったのですが phpから実行するとコピー出来ず悩んでいました。 (phpmyadminにログインするID、passを使用しても出来ないので権限が無い(?)のかもしれません) $result = mysql_query($sql)or die("コピーできません"); も試してみましたが、コピー出来ず。。 サーバーが異なっているかどうかはレンタルサーバーなので不明です。 件数がそこそこあり、データをcsvで書き出すと7MBもあるので、できれば一括コピーをしたかったのですが「insert into table名(項目名1,項目名2) values ("データ内容1","データ内容2")」を件数分地道にやっていこうと思っています。 ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>$sql = "INSERT INTO `db1` . `table1` SELECT * FROM `db2` .`table2`;"; SQL文のケツのセミコロンが不要 $sql = "INSERT INTO `db1` . `table1` SELECT * FROM `db2` .`table2`";

jpncan15
質問者

お礼

yambejpさん ご指摘ありがとうございます。 セミコロンを削除しましたが、結果はコピー出来ず、でした。

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

>>$sql = "INSERT INTO `db1` . `table1` SELECT * FROM `db2` .`table2`;"; PHP、MySQLには詳しくないので文法的なところは一切知りませんが、 insert句を書く際には、面倒でも insert into tabel1(項目1,項目2,項目3) select 項目1,項目2,項目3 from table2 と書いておくのが妥当かと。 >>同じ構造のテーブル 「同じ構造」と言っても、オートナンバー型のようなものは、そもそも入らないので、「項目1」が自動でナンバリングされるもの。 だったら、対象外にしなきゃいけなかったりしますし。

jpncan15
質問者

お礼

STICKY2006さん ありがとうございます。 ご指摘の通り insert into tabel1(項目1,項目2,項目3) select 項目1,項目2,項目3 from table2 を使用することにしました。 テーブルの構造は、phpmyadminでtable2の構造をSQL文で書き出したものを使用しているので構造は同じです。autoincrementを使用していません。

関連するQ&A

  • 異なるデータベース間のリレーション

    phpmyadmin上の異なるデータベース間のテーブルでリレーションをかけたいのですが、うまくいきません。 new_linkフラグをtrueにすることで異なるデータベースを開くところまではできました。 アドバイスいただけないでしょうか。 ※DB1の中にtable1が、DB2の中にtable2がある //失敗する $con1 = mysql_connect("localhost",username,pass); mysql_select_db('DB1',$con1); $con2 = mysql_connect("localhost",username,pass,true); mysql_select_db('DB2',$con2); $sql = "select * from table1,table2 where table1.id = table2.id"; $result = mysql_query($sql) or die(mysql_error()); メッセージ⇒Table 'DB2.table1' doesn't exist //これは成功する $con1 = mysql_connect("localhost",username,pass); mysql_select_db('DB1',$con1); $con2 = mysql_connect("localhost",username,pass,true); mysql_select_db('DB2',$con2); $sql1 = "select * from table1"; $result1 = mysql_query($sql,$con1) or die(mysql_error()); $sql2 = "select * from table2"; $result2 = mysql_query($sql2,$con2) or die(mysql_error());

    • ベストアンサー
    • MySQL
  • classについて

    $server = "localhost"; $database = "hoge"; $user = "user"; $pass = "pass"; $con = mysql_connect ($server, $user, $pass); mysql_select_db ($database, $con); $sql = "SELECT * "; $sql.= "FROM `table` "; while ($result = mysql_fetch_array ($rs, MYSQL_ASSOC)) { echo $result[hoge]; } 上記と同じことを下記のようなクラスにして db.php class db { $server = "localhost"; $database = "hoge"; $user = "user"; $pass = "pass"; function __construct() { $this->con = mysql_connect ($this->server, $this->user, $this->pass); mysql_select_db ($this->db, $this->con); } function query($sql){ $rs = mysql_query ($sql); return mysql_fetch_array ($rs, MYSQL_ASSOC); } hoge.php $db = new db(); $sql = "SELECT * "; $sql.= "FROM `table` "; while ($db->query($sql)) { echo $result[hoge]; } のようにしたのですが、うまくいきません。 function query($sql){ $rs = mysql_query ($sql); $result = mysql_fetch_array ($rs, MYSQL_ASSOC); } とすると一行はとれるのですが、複数行とるにはどうしたらいいのでしょうか・・・ どうかよろしくお願いします。

    • 締切済み
    • PHP
  • 同じサーバーで、異なるデータベースを同時に開くことはできますか?

    1.タイトルの通り、同時に開くことができますでしょうか? 日本PHPユーザー会ホームページでは以下の方法でできるとの回答があります。 $con1 = mysql_connect(localhost, user_id , pass); $con2 = mysql_connect(localhost, user_id , pass); mysql_select_db("db1",$con1); mysql_select_db("db2",$con2); ======================================== db1 user_table user_id(int),user_name(var) ========================================== db2 main_table main_id(int),user_id(int) ======================================== $sql_user_name = "SELECT user_name FROM user"; $result_user = mysql_query($sql_user_name,$con1); $row_user = mysql_fetch_array($result_user); echo $row_user[user_name]; のようにやっても mysql_fetch_array()がでます。 mysql_queryは最後の接続を活かすとなっているのでこの部分の書き方を教えてください。 2.できたとしてリレーションを行うことができますでしょうか? つまり $sql_user_name = "SELECT user_name FROM db1.user_table,db2.main_table WHERE db1.user_table.user_id = db2.main_table.user_id" というようなことはできますでしょうか? 長文で申し訳ありませんが、どうかよろしくお願いします。

    • ベストアンサー
    • MySQL
  • phpでmysqlで作成したdbを表示したい。

    現在phpのプログラムの学習を行っています。、 phpmyadminで作成したデータベースを読み込もうとしているのですが、うまくいきません。 参考書やサイトも参考にしたのですが、警告が出ています。 よくわからなくなってきましたので、教えていただきたいです。 ------------------------------------------------------------------------------- ・実行結果 Resource id #31Resource id #40 接続ID: 選択の成否: 結果ID: 行数: Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\job\job.php on line 45 ------------------------------------------------------------------------------- ・ソース <?php /*$con = mysql_connect('localhost','root','root') or die("接続できません"); print "接続に成功しました。"; mysql_close($con);*/ $url = "localhost"; $user = "root"; $pass = "***"; $db = "***"; // MySQLへ接続する $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); // データベースを選択する $sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。"); // クエリを送信する $sql = "SELECT * FROM t01prefecture"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //結果保持用メモリを開放する mysql_free_result($result); echo "$link"; echo "$sdb"; echo "$result"; echo "$rows"; echo "<br>"; echo "接続ID:<?= $link ?><br />"; echo "選択の成否:<?= $sdb ?><br />"; echo "結果ID:<?= $result ?><br />"; echo "行数:<?= $rows ?><br />"; $recordSet = mysql_query('SELECT * FROM my_items'); while($data = mysql_fetch_assoc($recordSet)){ /*このあたりが45行目 */ echo $data['item_name']; /* ここの値を変える*/ echo '<br>'; } // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。");

    • ベストアンサー
    • PHP
  • PHPでデータベース(mySQL)から値を取りだすには

    PHPで値をmySQLに保存するコードを作成するのに 成功したのはいいのですが、値を取り出して 出力するコードがうまく書けません ネットで調べてみたり、参考書を読んで やっているのですがうまくいきません こういうコードを書いたのですが <?php $conn=mysql_connect("localhost", "user", "pass"); if (!$conn) { die('接続失敗です。'.mysql_error()); } mysql_select_db("database", $conn); mysql_query("SET NAMES 'ja-utf8'", $conn); $sql='SELECT caram, FROM table'; $row=mysql_query($sql, $conn); $res=mysql_fetch_assoc($row); echo htmlspecialchars($res, ENT_QUOTES); mysql_close(); ?> どこが間違っているかご指摘いただけると ありがたいです。

    • 締切済み
    • PHP
  • PHPとMySQLで文字化けします

    <?php $con=mysql_connect("localhost","oxwar2","chono3"); $db=mysql_select_db("oxwar2",$con); $query="insert into japan(id,title,price)values(1,'絵本',1000)"; $result=mysql_query($query,$con); if($result){ print "OK"; } ?> として、実行すると上手くいきますが、phpMyadminで見ますと、日本語の部分だけが文字化けしております。 これを直すにはどうしたらよいのでしょうか。 文字コードはUTF8で作りました。色々試しても同じです。 どのようにしたらよいのでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • phpとmysqlが連携できない

    問題のコードです。 何度やっても失敗と表示されます。 接続は問題ないと思います。 お願いします。 $db = mysql_connect("localhost", "user", "user_パスワード", "db1") or die("Connection error"); $query = "select * from menbers"; $result = mysql_query($query, $db); if($result){ echo "成功"; }else{ echo "失敗"; }

  • PHPとMySQLの連携に関する質問

    PHPでMySQLに接続し、クエリを実行するプログラムを書いてコンパイルしたのですが ↓のエラーが出ました 「Fatal error: call to undefined function mysql_connect()」 このエラーの解決方法を教えてください(mysql_connect()はデフォルトでついているモジュールに入っていたと思うのですが) <?php $db=mysql_connect("localhost","秘密","秘密"); mysql_select_db("testtest"); $query="select * from testa"; mysql_query($query,$db); ?>

    • ベストアンサー
    • PHP
  • PHP5 DB問い合わせ時のエラーについて

    PHP5について質問です。 よろしくお願いします!! 下記のソースでDBへ問い合わせするとエラーがでます。 $this->dbConn=DB::connect("mysql://root:@localhost/a_db"); $this->link=mysql_connect("localhost","root","") or die("MSQLの接続に失敗"); $this->mysql=mysql_select_db(a_db) or die("データベースとの接続に失敗"); $this->query= "select * from customer_table01"; var_dump($this->query); $this->result=mysql_query($this->query) or die("クエリーを実行できず"); $this->rows=mysql_num_rows($this->result); $this->if($rows == 0 ){ print ("該当するデータがなし"); }else{ } エラー内容 Parse error: syntax error, unexpected '{' in C:\xampp\htdocs\y\baseClass.php on line 56 56行目とは、$this->if($rows == 0 ){ の部分です

    • ベストアンサー
    • PHP
  • PHPでMySQLテーブルロック一覧取得

    PHPでMySQLテーブルロックされている一覧を取得したいですがどのようにすれば良いかご教授願います。 Web検索で調べるとロック状態はmysql_list_processesや、show processlistでも試してみましたが、思うような結果は得られませんでした。正常には動作していますが、欲しいデータが取り出せないですす。。。 単純に、現在ロックしているテーブル名(レコードロックは不要です。)を一覧で出力させることはできないのでしょうか? PHPから実施できるやり方をご教授頂けると幸いです。 -------Test Program()--------- <?php $link = mysql_connect('localhost', 'login_id', 'login_pass'); mysql_select_db('db_name'); mysql_query('LOCK TABLES table1 WRITE'); mysql_query('INSERT INTO table1 SET field1 = "test", field2 = "1"'); //$result = mysql_list_processes($link); 以下のSQL文とも入れ替えて試しました。 $result = mysql_query('show processlist'); while ($row = mysql_fetch_assoc($result)){ printf("%s %s %s %s %s %s %s %s\n", $row["Id"], $row["User"], $row["Host"], $row["db"], $row["Command"], $row["Time"] , $row["State"], $row["Info"]); } mysql_free_result($result); mysql_query('UNLOCK TABLES'); ?>

    • ベストアンサー
    • MySQL

専門家に質問してみよう