ID:               41871
 User updated by:  kulakov74 at yandex dot ru
 Reported By:      kulakov74 at yandex dot ru
 Status:           Bogus
 Bug Type:         MySQL related
 Operating System: Linux / Windows
 PHP Version:      5.2.3
 New Comment:

Well maybe, but I checked MySql API mysql_free_result() source code and
there's no reference counting logic, it just frees stuff. I suppose this
is PHP's mysql_free_result() implementation that checks reference count,
and it was intended as a kind of service to prevent people from losing a
result set while there is still another reference around. But I do not
think this is really expected and people use it this way by calling
mysql_free_result() first and then using the same result again from
another variable. I think most people expect PHP mysql_free_result() to
call MySql mysql_free_result directly whatsoever. 

Also, I suppose PHP might call mysql_free_result() automatically when
reference count goes to 0 even before the script is over, for example if
I execute an Sql-query inside a function and then return from it without
saving the result PHP might call mysql_free_result() when destroying the
variable. 

But it is not obvious that reference count check should be done at
direct calls to mysql_free_result() as then I say I want it, no matter
how many references I still have. Also, it is not clear which exactly
variable is dereferenced from the result set as the variable passed to
mysql_free_result() still exists after the call and I can use it again.
If I call mysql_free_result() with the same variable again it does free
the result :)


Previous Comments:
------------------------------------------------------------------------

[2007-07-02 23:11:16] [EMAIL PROTECTED]

This is expected result. mysql_free_result() just decreases the
refcount to the result and actual freeing happens during request
shutdown (if refcount to the result is 0!).

------------------------------------------------------------------------

[2007-07-02 13:12:53] kulakov74 at yandex dot ru

Description:
------------
When I call mysql_free_result($Res) I expect I won't be able to use the
result in calls to mysql_fetch_array() etc. But if $Res is passed by
reference as a function parameter and is copied to another variable the
result is not freed and I can still use it. 

I realize this is a VERY unlikely condition and I found it by accident
(mixed 2 lines of code and got surprised to see no error). Also this
might well be intentional behavior. Anyway, just in case. 

Reproduce code:
---------------
a($Res);

function a(&$Res){
$Res=mysql_query("Show Tables"); $Res1=$Res;
mysql_free_result($Res);
mysql_fetch_array($Res); //still works!
}

Expected result:
----------------
Warning: mysql_fetch_array(): 7 is not a valid MySQL result resource in

Actual result:
--------------
No errors


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=41871&edit=1

Reply via email to