0

私はこれについて行ったり来たりしているようですが、うまくいくこともあれば、うまくいかないことも多く、どうすれば/なぜうまくいくのかわからなかったり、うまくいかないこともあります。

5 つのデータベースがあり、メンテナンス ルーチン中に各データベースからデータを取得する必要があります。データベースごとに、ページに含めるすべてのデータベース接続コードを含む外部ファイルがあります。

インクルードは次のようになります

$SGcon = mysql_connect("localhost","root","");

もし (!$SGcon)
  {
  die('接続できませんでした:' .mysql_error());
  }

mysql_select_db("sGopen", $SGcon);

データベースごとに異なる変数を提供するため、次のデータベースは

$PTcon = mysql_connect("localhost","root","");

もし (!$PTcon)
  {
  die('接続できませんでした:' .mysql_error());
  }

mysql_select_db("pTsecond", $PTcon);

次に、クエリを呼び出すときに使用します

 
mysql_query($getQuery, $PTcon);
mysql_query($secondQuery, $SGcon);

私が直面している問題は、クエリに使用される正しいデータベースを取得していないことです。私のスクリプトは、最後にページに追加されたデータベースを使用しているようです。

使用するデータベース接続を切り替えるより良い方法はありますか?

あるデータベースのデータを別のデータベースのデータと比較しているため、データベース間で多くのやり取りがあるため、これも効率的にしようとしています。

ありがとうピート

4

3 に答える 3

1

各クエリの間にdb接続を閉じると、問題が解決すると思います。

また、データベース間で多くの比較を行っている場合は、1 つの select ステートメントを使用してすべてのデータベースを一度にクエリします。

于 2009-06-18T22:24:22.010 に答える
1

デフォルトでは、以前の呼び出しと同じ引数をmysql_connectに渡すと、新しい接続を作成するのではなく、利用可能な場合はキャッシュされた接続を返します。したがって、両方のクエリは、最後に渡したデータベースに対して実行されmysql_select_dbます。

渡すnew_link=trueことでこの動作を回避できますが、データベース接続はコストがかかる可能性があるため、合理的に可能な限り開いたままにする必要があります。

new_link の詳細な説明:

2 回目の呼び出しが mysql_connect() 同じ引数で行われた場合、新しいリンクは確立されませんが、代わりに、既に開かれているリンクのリンク識別子が返されます。new_link パラメーターはこの動作を変更し、以前に同じパラメーターで呼び出されたmysql_connect()場合でも、常に新しいリンクを開くようにします。mysql_connect()SQL セーフ モードでは、このパラメーターは無視されます。

于 2009-06-18T22:31:50.340 に答える
1

特別な理由がない限り、データベースへの接続はできるだけ少なくしたいと考えています。1 つの接続を使用して、mysql_query() メソッドの機能を拡張するメソッドを作成します。SQL 文字列とテーブル名を渡すと、関数は mysql_select_db($tableName) を呼び出し、その同じ接続を再利用して SQL を処理します。

于 2009-06-18T22:34:15.220 に答える