|
Posted by Jerry Stuckle on 02/28/07 18:46
Mitesh wrote:
> Jerry Stuckle wrote:
>> Michael Fesser wrote:
>>> .oO(Jerry Stuckle)
>>>
>>>> Toby A Inkster wrote:
>>>>
>>>>> You have:
>>>>>
>>>>> $res = mysql_query("SELECT * FROM table1");
>>>>> ...
>>>>> $res = mysql_query("SELECT * FROM table2");
>>>>> if(!$res)
>>>>> return;
>>>>>
>>>>> $res is still going to be set as a result of your first query.
>>>>>
>>>>> Use unset($res) between each query.
>>>> No, Toby.
>>>>
>>>> $res will have the results of the second query. The resource returned
>>>> by the second query (or false) will overwrite what was in $res.
>>> Try that with PDO and it will crash most likely. Overwriting $res will
>>> not necessarily free the previous result set, which might then lead to
>>> MySQL complaining about an unbuffered query or something like that.
>>>
>>> | You cannot use the same variable for a PDOStatement object twice. As
>>> | others have pointed out it works when you set this variable to null in
>>> | between.
>>>
>>> http://bugs.php.net/bug.php?id=35793
>>>
>>> Micha
>> We're not talking PDO , Micha.
>>
>> --
>> ==================
>> Remove the "x" from my email address
>> Jerry Stuckle
>> JDS Computer Training Corp.
>> jstucklex@attglobal.net
>> ==================
>
> Ok if we need to call, mysql_free_result for mysql resources doesn't
> that mean every other type of resources bound this way to a variable
> must have a freeing function that has to be called before the variable
> can be re-used? So doesn't it coincide with what I am saying that
> variables bound to resources when re-used may cause problems. (and
> according to the others post the variables can be re-used if the
> previously allocated resource is freed)
>
THE VARIABLE IS NOT THE RESOURCE! The variable can be reused. But
there are MySQL resources allocated. mysql_free_result() frees up these
resources. If you don't call it, the resources won't be freed up until
the garbage collector runs. This will be sometime after the last
reference to the resource is destroyed/reused or whatever.
Now this is not likely to cause a problem in most systems. However, in
some circumstances (i.e. the resource caused rows or tables to be locked
in MySQL), other requests could be delayed until the garbage collector
runs. And in extremely busy systems, this could occasionally cause
other requests to time out because the locks are held too long.
But these are problems you wouldn't generally notice in most websites.
Nonetheless, it's always better to clean up after yourself and free the
resources as soon as you're done with them. Not only is it good
programming practice, it decreases the load on the server (because
resources are not being held longer than necessary).
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================
Navigation:
[Reply to this message]
|