複数台のマシンで稼働してた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への接続になってしまいます。
どうしてなのでしょうか?また、こういう場合、どう対応してらっしゃいますか?
以下は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にして与えてやればいいような気がします。
うっかりマニュアル読み飛ばしてました。。。
これでいけそうですね。ありがとうございます!
以下のリンク(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);
とすれば意図された動作をすると思います。
ありがとうございます!
デフォルトでtrueにしておけばいいのに、、、
と思ってしまいます。
当該ページも調べました。
コマンドは理解できているんで、そのページの内容は理解できます。
つまり、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)