0

私はこの問題にちょっと夢中になっています。自分ではできないので、この問題を解決するにはコミュニティが必要です。どこを見ればいいのかわからなかったので、これに何時間も費やしてきました。私は今、可能な修正を知っていますが、それはただ面倒です(読み進めてください). 私よりもこのことについて詳しい人が必要なだけです。

これは私の状況です:

  • 2 つ以上の mysql 接続を使用したいと考えています。
  • OOPを使用しています

dbase というクラスがあり、2 つの関数とsetConnectionandgetConnectionと呼ばれる 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 (または私の頭) を再び正常にしようとする提案はありますか?

4

1 に答える 1

0

使用するすべての場所に echo $this->connection を配置するようにしてください。また、「id」メンバーを作成し、dbase-object の構築時に一意の値を入力して、$this->connection の値に沿ってエコーします。このようにして、接続に何が起こったのかを追跡できます。

そして、おそらく$foo->connection を割り当てているクラスの外部に場所があるかどうかを確認してください。メンバーで「プライベート」を使用していない場合、たとえば、コードの無関係な部分からハックや実験を削除するのを忘れたときに、このような問題が発生するはずです。

于 2012-12-28T05:59:31.747 に答える