PHP+MySQLで2回mysql_connect()を実行すると”Warning: mysql_connect(): Can’t connect to local MySQL server through socket ’/var/tmp/mysql.sock’ (2) ”というエラーが出てしまう(mysql_close()はしてるんですが)ので、処理の最初にmysql_connect()を一回だけ実行し、mysql_close()せずに接続を使いまわすようにしました。調べた所接続の切断は自動的に行われるのでmysql_close()は使用しなくて良い、と書いてあるリソースを見つけたためですが、何となく心配です。セキュリティ的・リソース的に、この方法で問題は無いのでしょうか?


ちなみに、下記の問題が解決しないのでこの方法を採用しています。
http://www.hatena.ne.jp/1114105997

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/04/25 18:27:23
  • 終了:--

回答(3件)

id:kura_jet No.1

kura_jet回答回数42ベストアンサー獲得回数02005/04/25 19:04:32

ポイント20pt

URLはダミーです。

問題はありませんというか、むしろDBのOpen/Closeを頻繁にするよりは処理の一番最初と最後に1回ずつ行う方がいいと思います。

理由はDBサーバに接続をするのは時間の掛かる処理だからです。頻繁にOpen/Closeを行うことにより、処理待ちが発生する可能性がありますので、1回で行った方が逆にリソースは軽減されると思います。

セキュリティ的な問題は回数というよりも、ネットワーク上に存在しますので、この件で気にする必要は無いと思います。

id:dak

なるほど。接続処理自体が時間が掛かると。電気(照明)のON/OFFを頻繁に行い過ぎると寿命が短くなるみたいな感じですね(逆か)。裏を取れるリソースが指定されてるとより良かったですが、とても参考になりました。有難うございます!あ、close処理は最後に明示的に行った方が良いのでしょうか?

2005/04/26 02:03:31
id:hukko No.2

hukko回答回数26ベストアンサー獲得回数02005/04/26 11:20:33

ポイント20pt

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

http://ns1.php.gr.jp/pipermail/php-users/2002-September/010173.h...

[PHP-users 10167] リソース変数の開放のタイミング

http://ns1.php.gr.jp/pipermail/php-users/2002-September/010177.h...

[PHP-users 10171] Re: リソース変数の開放のタイミング

「このため、PHPプログラミング(とくにWebプログラミング)ではリソースは明示的に解放しない方が良いです。」

id:dak

実は細かい部分は良く分からなかったのですが、正しいリソースで、結論もきっと正しいんだろうな、という雰囲気は感じ取る事ができました(笑)。今時点ではそれで十分だと思いましたので、大変役に立つ回答でした。ありがとうございます。参考までに質問は継続します。

2005/04/26 23:02:41
id:kuippa No.3

くいっぱ回答回数1030ベストアンサー獲得回数132005/05/01 03:12:03

ポイント20pt

ごめんなさい、前回の質問のRESを読むのに時間がかかりました。


まず、その方法には問題があります。

通常、自動的に切断されるので問題がないといえば無い…(!??)ですが、セッションが切れるのをWebサーバーが認識するまでゴミトランザクションが残る可能性があります。できるだけ、明示的に処理を完結させた方がよいかと思います。


その上で…


http://www.hatena.ne.jp/1114105997

人力検索はてな - PHP+MySQLで自前のアクセスカウンターを作っています。”Warning: mysql_connect(): Can’t connect to local MySQL server through socket ’/var/tmp/mysql.sock’ (2) ..

この下の

function dbclose($con) {

という関数。

これだと$conが値渡しになっています。

function dbclose(&$con) {

にするか

function dbclose() {

global $con;

と記述する必要があるかと思います。

id:dak

でも、dbopen()の時は値渡しで返り値を取れてるんですよね。。リンクIDというのは値として渡せるものかと思っていましたが、違うのでしょうか?一応、http://www.hatena.ne.jp/1114421243 の方法で本件は仮解決したつもりになっていますが、今後のために制限時間一杯まで回答受付けます。どなたか分かりやすく説明できる方がいらしたら、是非お願いします。

2005/05/02 00:41:15

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

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

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

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

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