横浜の業務用ソフトウェア開発やPHPを使ったWEBシステム開発・ホームページ制作ならアイ・エヌ・ワークスにお任せください。

横浜のホームページ制作ページ
  • home
  • 会社概要
  • 制作実績
  • 価格
  • ダウンロード
  • ブログ
  • お問い合せ
ホーム > ブログ

【横浜のWeb制作業者】ブログ

  • home
  • 横浜のホームページ制作・アイエヌワークス会社概要
  • 横浜のソフトウェア開発・アイエヌワークスの制作実績
  • 横浜のWebサイト制作・アイエヌワークスの価格
  • ダウンロード
  • 横浜のウェブ制作・アイエヌワークスのブログ
  • 横浜のWebシステム・アイエヌワークスへのお問い合せ

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

マニュアルでは

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

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

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

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

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

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

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

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

 

 

 

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

No comments yet.

TrackBack URL

Leave a comment