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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP+MySQL on さくらサーバー
-
phpで複数のDBを使用した場合の...
-
接続ができません
-
SQLのVARCHARとVARCHAR2の違い
-
like句を使って日本語を検索す...
-
副問合せにLIKE文を使う方法は...
-
VBAで変数内に保持された二次配...
-
RPMのmysqlとmysql-serverの違い
-
ODP.NETのバージョン確認
-
「・」中点が入った文字列を条...
-
.sqlのファイルをそのままコマ...
-
検索機能
-
Float型の時の計算結果がおかしい
-
ERROR 1045 (28000) (using pas...
-
postgreSQLのデータ型
-
ACCESSとXサーバーをODBCで接続...
-
プライマリーキーの昇順でソー...
-
PDFをDBに格納する/取り出すには?
-
MySQLにリモートホストから接続...
-
実行時エラー80004005
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpで複数のDBを使用した場合の...
-
MySQLのテーブルのデータ数のカ...
-
show databasesコマンドが効かない
-
UPDATEできない
-
MySQLが動かない(テーブルレコ...
-
C言語で変数の内容をINSERTする...
-
phpでデーターベース編集
-
MySQLで合計と小計の計算方法を...
-
初心者ですがupdateがうまくい...
-
複数行のクエリを、まとめて実...
-
(phpeditor)→(phpMyadmin)
-
緊急です。insert文が実行されない
-
検索結果IDの使いまわしについて
-
MySQLのINSERT文で変数展開がで...
-
トランザクションが効かない
-
mysqlのスマートな書き方
-
mysqlのデータベースの内容をph...
-
テーブルのデータをarray (arra...
-
[MySQL]全くクエリーキャッシュ...
-
カウントして抽出するsqlをまと...
おすすめ情報