Database server auto-close

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
I just wondered if someone could clarify... I have a a script connecting
with mysql_connect and in an include at end of page mysql_close

If they script terminates before end of page ie. with an exit() or maybe  
trigger_error(), does php always disconnect the open'ed connection?

I ask because PHP manual says yes, but I've seen some comments relating  
to PHP 4 saying it doesn't.

Please can you tell me your experiences?

Re: Database server auto-close

Quoted text here. Click to load it

Yes, that applies to all resource handles opened during execution--
database connections included. It's actually just one instance of a
general phenomenon in PHP. When the last variable pointing to the
resource handle goes out of scope, the handle is closed. For example,
in the following function:

function log($s) {
  $f = fopen("log.txt", "wb");
  fwrite($f, $s);

the file will be closed automatically when the function returns, as $f
goes out of scope.

And the following is perfectly okay:

if(mysql_connect( ... )) {

Since the handle returned isn't saved, the connection will be closed

When a script terminates--one way or another--all variables within it
are destroyed, so all resource handles will be closed.

Persistent connections are a different story--you can only close these
by terminating the web server.

As a side note: Don't wait till the end of the page before you close
the database connection. That's a recipe for "Too many connections"
errors. Read the necessary data from the database then close the
connection before you output to the client.

Re: Database server auto-close

Chung Leong wrote:

Quoted text here. Click to load it

Could you expand on that?
I can't think of a way that closing at the end would do that.

Re: Database server auto-close

Quoted text here. Click to load it

Well, it's not that hard to understand. It takes time for the page to
get sent to the client. Generally it's a lot longer than the time it
takes to retrieve data from the database. A query might take 100
millisec. Transferring a HTML page could conceivably take over 10
seconds. Holding onto the connection til the end of the page means
more concurrent connection there needs to be.

Site Timeline