MYSQLで同一サーバ、同一ユーザにて、複数のデータベースを使用したい。

複数台のマシンで稼働してたDBを、1台のマシンのDBサーバにまとめたのです。

$con1 = mysql_connect ( $server , $user , $password) ;
mysql_select_db( $database1, $con1) ;
$con2 = mysql_connect ( $server , $user , $password) ;
mysql_select_db( $database2, $con2) ;

素人考えで上記のようにに記述すると、$con1はdatabase1への接続でなく、database2への接続になってしまいます。
どうしてなのでしょうか?また、こういう場合、どう対応してらっしゃいますか?

回答の条件
  • 1人2回まで
  • 登録:2007/12/26 01:48:51
  • 終了:2007/12/26 12:53:49

回答(3件)

id:ffmpeg No.1

ffmpeg回答回数1202ベストアンサー獲得回数92007/12/26 05:33:56

id:torijun

当該ページも調べました。

コマンドは理解できているんで、そのページの内容は理解できます。

つまり、SQL発行ごとにmysql_connect~mysql_closeをしなさい、ってことですか?

理由はもうすこしPHP/MySQLの仕様的なところの気がしてます。

なお、申し遅れました。環境はこれです。

mysql> select version();

| 4.1.14-standard-log |

# php -version

PHP 4.4.0 (cli) (built: Jan 23 2006 21:19:17)

2007/12/26 08:07:24
id:blueberrystream No.2

KID the Euforia回答回数34ベストアンサー獲得回数52007/12/26 11:05:00

ポイント40pt

以下はPHPマニュアル(http://www.php.net/manual/ja/function.mysql-connect.php)からの抜粋です。

mysql_connect

(PHP 4, PHP 5, PECL mysql:1.0)

mysql_connect ― MySQL サーバへの接続をオープンする

説明

resource mysql_connect ( [string $server [, string $username [, string $password [, bool $new_link [, int $client_flags]]]]] )

(中略)

new_link

同じ引数で 2 回 mysql_connect() をコールした場合、 2 回目は新規のリンクが確立されるのではなく、代わりにすでにオープンされた リンクのリンク ID が返されます。 パラメータ new_link はこの動作を変更し、既に mysql_connect() が同じパラメータでコールされて いる場合でも常に新規のリンクがオープンされるようにします。 SQL セーフモード の場合はこのパラメータは無視されます。

とあるので、この引数new_linkをtrueにして与えてやればいいような気がします。

id:torijun

うっかりマニュアル読み飛ばしてました。。。

これでいけそうですね。ありがとうございます!

2007/12/26 12:51:50
id:kazukichop No.3

kazukichop回答回数3ベストアンサー獲得回数12007/12/26 12:21:00

ポイント40pt

以下のリンク(PHPマニュアル)のnew_linkの項を見てください。

http://jp.php.net/manual/ja/function.mysql-connect.php

同じ引数で2回mysql_connect()をコールした場合、2回目は新規のリンクが確立されるのではなく、代わりにすでにオープンされたリンクのリンクID が返されます。パラメータnew_linkはこの動作を変更し、既にmysql_connect()が同じパラメータでコールされている場合でも常に新規のリンクがオープンされるようにします。 SQLセーフモードの場合はこのパラメータは無視されます。

とありますので、

$con1 = mysql_connect($server, $user, $password, true);
mysql_select_db( $database1, $con1);
$con2 = mysql_connect($server, $user, $password, true);
mysql_select_db($database2, $con2);

とすれば意図された動作をすると思います。

id:torijun

ありがとうございます!

デフォルトでtrueにしておけばいいのに、、、

と思ってしまいます。

2007/12/26 12:53:07

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません