• ベストアンサー
  • すぐに回答を!

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の構造は同じです。

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数806
  • ありがとう数4

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

その他の回答 (3)

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答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」が自動でナンバリングされるもの。 だったら、対象外にしなきゃいけなかったりしますし。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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
  • 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
  • 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
  • MYSQLの差集合について

    MYSQLの差集合について MYSQLの差集合についてお教えください。OracleにはMinus、Postgres等はexceptがあります。MYSQLで同等の関数がないか調べましたが、無いのか検索がヘタなのかヒットしません。下記のようにSQLを書けばexceptと同じ効果があるのはわかりますが、exceptみたいにかけたら簡単かなと思います。そのような関数がありましたら、お教えください。よろしくお願い致します。 mysql> SELECT table1.* FROM table1 -> LEFT JOIN table2 ON table1.id=table2.id -> WHERE table2.id IS NULL;

    • ベストアンサー
    • 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
  • 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に接続することができません。 解決方法をご存じの方は教えていただけないでしょうか。 PHPから、mysql_connect を行った際、以下のエラーが発生してしまいます。 Can't connect to local MySQL server through socket '/tmp/mysql.sock' (13) 環境 OS:CentOS 5.3 DB:Mysql 5.0.67(ソースからインストール) Web:Apache PHPのソースの一部を以下に記します。   $db_host = 'localhost';//DB_NAME;   $db_user = 'user';//DB_USER;   $db_pass = 'pass';//DB_PASS;   $db = mysql_connect($db_host,$db_user,$db_pass); 以下の方法も試したのですが、エラーメッセージは変わりませんでした。   $mysql_connect("localhost:/tmp/mysql.sock","mysql","passwd") 端末のコマンドからMySQLへの接続は成功します。 ホスト名、ユーザー名、パスワードも上記と同一のものです。   $ /usr/local/mysql/bin/mysql -h localhost -u user -p   Enter password:pass 以上です。宜しくお願いします。

    • 締切済み
    • PHP
  • PHPでMySQLのデータを検索したい

    お世話になります。 PHPでMySQLのデータを検索したいと思い、 以下のようにしてみたのですがうまく表示されません。 -- $name = $_POST["name"]; $link = mysql_connect('localhost', '', ''); $db_selected = mysql_select_db('', $link); mysql_set_charset('utf8'); $sql = "SELECT * FROM search WHERE". $name; $result = mysql_query($sql); while($row = mysql_fetch_array($name)) { print $row['name']; } $close_flag = mysql_close($link); -- どう改善すればいいのでしょうか? 初心者の為、少々お見苦しい点があるかと思いますが どうぞよろしくお願いします。

    • ベストアンサー
    • 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
  • DBをまたいで更新

    現在、testDB1とtestDB2というDBが存在します。 それで、testDB1のtable.idとtestDB2のtable2.idを SELECT文で比較して、同じidの場合はtestDB2のtable2.dataに 1という値を格納したいと思っています。 それで、DBをまたいで更新するときの記述が分からず ネットで検索したのですが、うまくヒットしませんでした。 そもそもDBをまたいで問い合わせや更新等はできないのでしょうか? できない場合、代替の方法があったら教えて頂けますでしょうか。 よろしくお願い致します。