私はこの問題にちょっと夢中になっています。自分ではできないので、この問題を解決するにはコミュニティが必要です。どこを見ればいいのかわからなかったので、これに何時間も費やしてきました。私は今、可能な修正を知っていますが、それはただ面倒です(読み進めてください). 私よりもこのことについて詳しい人が必要なだけです。
これは私の状況です:
- 2 つ以上の mysql 接続を使用したいと考えています。
- OOPを使用しています
dbase というクラスがあり、2 つの関数とsetConnection
andgetConnection
と呼ばれる 2 つのクラス変数が$connection
あり$dbaseName
ます。
メイン プロジェクト ファイルに dbase を含め、次の 2 つのオブジェクトを作成します。
- データベース
- メインベース
それから私は:
$this->dbase->setConnection($server, $uname, $pword);
$this->maindbase->setConnection($server, $uname, $pword);
setConnection 関数は次のようになります。
function setConnection ($server, $serv_Username, $serv_Password) {
$this->connection = mysql_connect($server, $serv_Username, $serv_Password, true);
// echo $this->connection . "<BR>";
}
私はそれをエコーして確認し、 mysql_connect にtrueresourcenumber
を追加しました (そして、5.5 以降は非推奨であることを知っています。そのためにここにいるわけではありません)。
さて、OOP を理解しているので、クラス変数はオブジェクトごとに設定されます。したがって、dbase からの $connection は決して同じにはなりませんmaindbase
(もちろん、同じ資格情報を使用しない限り、ただし、有効にした $new_link オプションのために新しいリンクが作成されます)。どちらも異なるリソース ID を持っています。
私の問題:
クラス dbase には、次のようなクエリを実行する関数もあります。
$connection = $this->getConnection();
$dbase_name = $this->getDbaseName();
mysql_select_db($dbase_name, $connection);
$q = "SELECT * FROM {$table_name} WHERE {$column} LIKE '{$value}'";
$result = mysql_query($q);
さて、このように使用すると、クラス dbase で設定された最初の $connection が常に使用され、これがオブジェクト dbase かmaindbase
.
次のエラーが表示されます。
Table 'testdbase1.skye_domains' doesn't exist
オブジェクト dbase は testdbase1 に接続されています
オブジェクトmaindbase
は testdbase2 に接続されています
オブジェクトを使用して結果を選択しようとすると、上記のエラーが発生しmaindbase
ます。
$connection
文字列を削除するmysql_select_db
と、mysql_connect を使用しているかのように新しい接続を開こうとするため、完全に機能します。
どうしてこれなの?これは無理ですよね?maindbase
オブジェクトがオブジェクト dbase と同じ $connection を持つにはどうすればよいですか? それらは互いに接続されていません... PHPは、私が気付いていないグローバルなmysql_connect変数またはバッファを何らかの形で使用していますか?
たまにしか使えないので使い続けたいと思いconnectionstrings
ます。$connection 文字列を除外するのは面倒です。
PHP (または私の頭) を再び正常にしようとする提案はありますか?