- ベストアンサー
PHPからMySQL・異なるDBにコピーする方法
- PHPからMySQL・異なるDBに接続し同じ構造のテーブルのデータをコピーすることは可能ですか?
- クエリが実行されず「コピーできません」が表示される問題が発生しています。
- どのようにすればコピーできるか教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
table2 からセレクトした値を配列に入れて置いて、table1に順番にインサートする。 mysql_select_db("db2", $connect2); を実行したら、MySQL関数群は $connect2 の db2 に対してクエリーを実行するので $connect1 の db1 にアクセスできません。
その他の回答 (3)
- 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")」を件数分地道にやっていこうと思っています。 ありがとうございました。
- yambejp
- ベストアンサー率51% (3827/7415)
>$sql = "INSERT INTO `db1` . `table1` SELECT * FROM `db2` .`table2`;"; SQL文のケツのセミコロンが不要 $sql = "INSERT INTO `db1` . `table1` SELECT * FROM `db2` .`table2`";
お礼
yambejpさん ご指摘ありがとうございます。 セミコロンを削除しましたが、結果はコピー出来ず、でした。
- STICKY2006
- ベストアンサー率29% (1536/5269)
>>$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を使用していません。
お礼
t_ohtaさん ありがとうございます。 一括コピーが出来ないので、教えていただいた通り「insert into table名(項目名1,項目名2) values ("データ内容1","データ内容2")」を件数分地道にやっていこうと思っています。 データ件数がそこそこあり、データをcsvで書き出すと7MBもあるので、時間がかかりそうですが。。 ありがとうございました。