2011-11-15 6 views
1

仮に、奇妙なMySQL/PHP駆動型ソフトウェアを複数インストールしたとしましょう。それらは同じソフトウェアですので、データベースのテーブル構造はすべてのインストールのクロスです。私がやりたいことは、ソフトウェアがの1つだけテーブルのために別のデータベースプレフィックスを使用するようにすることです。具体的には、ユーザテーブル。1つのテーブルの異なるテーブル接頭辞?

  • 主なインストール::/ホーム/ www /のメイン、データベースのメイン、プレフィックスIS1
  • セカンドインストール:/ホーム/ www /の秒、データベースのメイン、プレフィックスIS2
  • ので、インストールは、次のように設定されていると言います
  • 第三にインストールします。/ home/www /の第三、データベースのメイン、

だから私がしたいことは二伝えインストールおよび第三その経て、自身のデータのためのプレフィックスIS1上のユーザーテーブルから引っ張ってインストールすることで、プレフィックスIS3を表。したがって、メインインストールで登録するユーザーは、2番目と3番目に登録され、その逆も同様です。それは可能なのですか、そうなら私はどうしますか?同じ基本的な結果を返す単なる回避策であっても、私は満足しています。

+0

ただ1つの表に接頭辞を付けることができるかどうかはわかりませんが、他にすべての接頭辞を付けることができない理由はありますか? 質問の2番目の部分は、SQLクエリの問題がありますか?誰かが登録すると、3回、各テーブルに1つずつ挿入することができます。それともあなたがやろうとしていることがありますか? – mugetsu

答えて

0

PHPコードはおそらくcfg.phpのようなもので、このような何かを行く:

$prefix = 'is3' 

とuser.model.phpのようなもので:

$sql = 'SELECT * FROM `'.$prefix.'users`'; 

ですから、二つに変更する必要があります3つのインストールのうち、 'users'テーブルを操作するためのコードです。しかし、それはあまりにも危険なようです。

+0

あなたはそれが危険であると言うのですか? – Australiya

+0

大きなプロジェクトで必要な変更を加え、間違いを犯さないことはむしろ困難です。もちろん、その構造に依存します。私はruakhの答えが良い方法だと思います。 – Constantine

2

is1usersの見解であることをis2usersis3usersを変え、その後、別のオプションは、データベースを変更することで、あなたはアプリのPHPのソースコードを変更する必要はありません、それはこの点では、すでに設定できない場合は、次の

(例えば、アプリがメモリ内のいくつかの情報をキャッシュするかもしれない -
DROP TABLE is2users; 
CREATE VIEW is2users AS SELECT * FROM is1users; 
DROP TABLE is3users; 
CREATE VIEW is3users AS SELECT * FROM is1users; 

(。特にVIEWのCREATEの詳細については、ビューの一般的な情報については、http://dev.mysql.com/doc/refman/5.0/en/create-view.htmlhttp://dev.mysql.com/doc/refman/5.0/en/views.htmlを参照してください)

アプリによっては、これは完璧に動作しない場合がありますcu識別子シーケンスの値) - しかし、はおそらくになります。プロダクションに入れる前にテストしてください!

+0

ありがとうございました。非常に感謝して、それはコピー上の既存のユーザーのパスワードを壊しましたが、新鮮なインストールでは、私はrootアカウントを放棄することができます(私は通常とにかく)。私はあなたにキスすることができます。あなたのためのクッキー。 = 3 – Australiya

0

この設定は、スキーマ単位で簡単です。あなたは、おそらくあなたがさまざまな設定を変更することができます設定ファイルを含むいくつかのパッケージ化されたライブラリを使用していることを意味する 'インストール'と言及し、設定の一つはテーブルの接頭辞です。テーブルプレフィックスオプションがない場合は、インストールコードを参照してスキーマの場所を見つけて、インストールごとに手動でプレフィックスを変更できます。

ここで説明したようにコードが動作するようになると、ハードパートが表示されます。 3つのデータベースをすべて認識させる必要があります。つまり、2つの新しいデータベースコネクタをコードに追加する必要があります(データベースごとに1つずつ)。次に、3つのデータベース全体でユーザーデータを挿入/更新/削除するためのユーザーCRUD機能を処理するロジックを追加する必要があります(トランザクションはここでうまくいくでしょう)。

説明は可能ですが、カスタムコードが必要です。

関連する問題