
mysqlは複数のDB(DBエンジンではなくデータベース)に跨る検索は出来ないと思いますが、仮に複数のDBを使う必要がある場合一般的にはどのようにしてるのでしょうか? 特にDBアクセスクラスを作っている場合のまとめ方など指南して頂けないでしょうか?
今は、一つのクラスの中で、コンストラクタでコネクト処理をして、全てのDBアクセスはクラスの中のメソッドを通してやってましたが、ここに来て別のDBも参照する必要が出てきて対応に困っています。せっかくクラスの概念にも慣れてきてるところなので、ぜひきれいなコード(処理)をしたいと考えています。
使用する環境は、
debian woody
php 5.2.0-8
mysql4.0.24
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
#1です。
レスへのレス。コーディングというよりデザイン(設計)の話ですね。どちらが分かりやすい、どちらがメンテナンスしやすい、どちらが将来的に汎用性がある、とか言う事に主眼をおいたらいいと思います。
接続方法は一緒でしょうから、接続用のクラスをまず作って、DB毎に違うでしょうからそれを継承した拡張クラスをDBの数用意し、それらを利用する大きなクラスでまとめていろんなメソッドを追加していく、と言う事になるのではないでしょうか。
参考まで。
No.2
- 回答日時:
私の理解力がないのかいまいち状況がはあくできないのですが、
今回の希望は別サーバーへのアクセスなのでしょうか?
それとも同じサーバー内の別データベースへのアクセスなのでしょうか?
リンクをわければアクセスできそうですが。
別サーバーであれば・・・
$link1=mysql_connect($host1,$username1,$password1);
$link2=mysql_connect($host2,$username2,$password2);
mysql_select_db($database1,$link1);
$sql="SELECT * FROM `hoge`";
$res=mysql_query($sql,$link1);
mysql_select_db($database2,$link2);
$sql="SELECT * FROM `fuga`";
$res=mysql_query($sql,$link2);
同じサーバーの別データベースなら
$link=mysql_connect($host,$username,$password);
mysql_select_db($database1,$link);
$sql="SELECT * FROM `hoge`";
$res=mysql_query($sql,$link);
mysql_select_db($database2,$link);
$sql="SELECT * FROM `fuga`";
$res=mysql_query($sql,$link);
検証してないので、間違っている可能性かなりありますが・・・
No.1
- 回答日時:
きれいかどうかわかりませんが。
。。。PEARのDBクラスでやった場合、こんな感じです。
require_once 'DB.php';
$dsn1 = "mysql://aaa1: @localhost/hogehoge";// 自ホストのhogehogeへaaa1で接続
$dsn2 = "mysql://aaa2: @db.host.name/herohero";//別サーバ db.host.nameのheroheroにaaa2で接続
$db1 = DB::connect( $dsn1 );//接続、オブジェクト$db1を返す
$db2 = DB::connect( $dsn2 );//接続、オブジェクト$db2を返す
..........................
//別サーバのテーブルからgetAll()を使ってデータを取得し、自サーバに格納してみましょう
$arr = $db2->getAll("SELECT * FROM ......");
foreach($arr as $data){
$db1->query("INSERT INTO .......");
}
とこんな感じです。ちなみにMySqlとPostgreSQL、オラクル、と言うようにどんなDBであっても同じです。
同じ処理が多かったら、これをクラス化すれば良いとお思います。
参考まで。
回答ありがとうございます。
質問にも書きましたが、自作クラスからアクセスするようにしています。
これを自作クラスに当てはめた場合、やはりコンストラクタで二つのDB接続処理をするのがスマートなんでしょうか?
その場合、戻り値も二つとなりますよね。それともコンストラクタでは接続に必要な情報のセットだけにして、別メソッドでそれぞれ接続処理したほうがいいのでしょうか?
今これを書きながらmysqlというよりphpのコーディングの話である事に気付いてしまいましたがよろしくお願いします。
クラスはなかなか難しいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 情報処理技術者・Microsoft認定資格 応用情報処理技術者試験のシステム利用率の計算について 2 2022/03/28 07:43
- MySQL PHP 画像のアップロード Qiita 2 2022/11/28 04:44
- IT・エンジニアリング ドメイン駆動設計の値オブジェクトについて質問 1 2023/05/13 02:50
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- MySQL AWSのRDSを無料枠で使用しておりますが、2日前にDBインスタンスを作成し、現在確認したらDBイン 1 2022/07/19 23:49
- SQL Server SQL ServerでDBを構築。これは開発? 4 2022/05/28 14:10
- Excel(エクセル) アウトラインの小計のやり方 1 2023/03/20 11:51
- Excel(エクセル) VBAのエラーが直せません 4 2023/06/12 22:10
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
下記の問合せを行うクエリを、P...
-
mysqlがインストールされている...
-
下記の問合せを行うクエリを、P...
-
下記の問合せを行うクエリを、P...
-
テーブル名が可変の場合のクエ...
-
MySQL NULLだけをカウントして...
-
SQLで漢字名称を都道府県や市区...
-
エラー 1068 (42000): 複数の主...
-
何にかが違うから エラーなんで...
-
MySQLでcreateが使えない MySQL...
-
データベースの接続について
-
同一日に複数レコードがある場...
-
MAMP 99ドル約1.6万円 高い...
-
あってますか?SQL
-
WHERE `年月日` = '晴' OR `年...
-
SQLです教えてくださいお願いし...
-
SQLを作ったのですがうまくいき...
-
(初心者)MySQLやmaraDBで、crea...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mysqlがインストールされている...
-
同一日に複数レコードがある場...
-
#1062 - '0' は索引 'PRIMARY' ...
-
エラー 1068 (42000): 複数の主...
-
SQLでカラムを追加し、条件に合...
-
テーブル名が可変の場合のクエ...
-
【初歩】ラジオボタンをつかっ...
-
MySQLのテーブル作成でハイフン...
-
mysqlのupdate構文についての質...
-
LIMIT で条件を満たしているの...
-
データベースの接続に失敗して...
-
MySQL NULLだけをカウントして...
-
select *, `人口(男)`AND`人口(...
-
複数DBテーブルからのデータ取得
-
テーブル:生徒名簿 生徒名簿の...
-
htmlコードで書かれた表にphpで...
-
データベースの複製の仕方(mysql)
-
「重複を間引いた数」をcountし...
-
MAMP 99ドル約1.6万円 高い...
-
SQLです教えてくださいお願いし...
おすすめ情報