質問
これについて何度もやり直しているように見えますが、時々うまくいくこともありますが、うまくいかないこともあります。 。
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を処理できます。