質問

これについて何度もやり直しているように見えますが、時々うまくいくこともありますが、うまくいかないこともあります。 。

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

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

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

if (!$SGcon)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("sGopen", $SGcon);

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

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

if (!$PTcon)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("pTsecond", $PTcon);

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

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

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

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

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

ありがとう ピート

役に立ちましたか?

解決

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

new_link = true を渡すと、この動作を回避できますが、データベース接続は負荷が高くなる可能性があるため、できる限りオープンしないようにしてください。

new_linkの詳細な説明:

  

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

他のヒント

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

また、データベース間で多くの比較を行う場合は、1つの選択ステートメントを使用してすべてのデータベースを一度に照会します。

特定の理由がない限り、データベース接続を可能な限り低く維持する必要があります。 1つの接続を使用し、mysql_query()メソッドの機能を拡張するメソッドを作成します。 SQL文字列を渡すと、テーブル名がmysql_select_db($ tableName)を呼び出し、同じ接続を再利用してSQLを処理できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top