MySQL接続ではまる(PHP)


今、データベース間でデータをコピーをするというプログラムを作っているのですが、今日ちょっとハマってしまいました。 
一見動いているようなのに実はデータが全然コピーされていない…。
いろいろ調べた結果、mysql_connect関数の問題であると判明しました。

マニュアルでは

int mysql_connect([string server [,string username [,string password]]])

となっていますが、注意として

同じ引数で2回mysql_connect()をコールした場合、 二回目は新規のリンクが確立されるのではなく、代わりにすでにオープンされた リンクのリンクIDが返されます。

と書いてあります。
今回、コピー元とコピー先のデータベース名は違いますが、同じサーバ、同じユーザ、同じパスワードで接続していました。
ですので(違うコネクションだと思っていたものは)実は同じコネクションであり、同時に使う処理は当然できないのでした。 

で解決法ですが、簡単でした。
(なぜか私のマニュアルには説明がありませんでしたが)4番目のパラメータがあり、それにtrueを渡せば必ず新しいコネクションを返してくれます。 

$cn = mysql_connect('localhost', 'user', 'passwd', true);

まあ一種のフールプルーフとしてむやみにコネクションを張らせないようこういう仕様になっているのでしょうが、知らないと動かした時に???となってしまいます。

というわけで、ちょっといただけない仕様ですね。


コメントを残す

メールアドレスが公開されることはありません。