Re: uh oh, I defined a resoruce

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Jan 10, 2008 1:33 PM,  <reese@xxxxxxxxxxxxxxxx> wrote:
> I have been using define to create a constant for the link resource returned by mysql
> pconnect like so:
>
> $PL = @mysql_pconnect("localhost", $DBUser, $DBPass);
> define("SITE_DB",$PL);
>
>
> Later I use the constant to select my databases.
>
> mysql_select_db($SrcdbID ,SITE_DB);
>
> This code seems to be working as I expected and I have many thousands of llines of code
> done over several years using this construct.
>
> But, I happened to be reading the php doco today and noticed that you are not supposed to
> use define for resources, so question is, is what I am doing safe or am I going to run into
> problems and if so what is the best way to globally pass resources to multiple classes and
> functions, command line scripts etc?
>
>
> Cheers
> Charlie Reese
>
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Hi Charlie!

Well a CONSTANT is a value that doesn't change.  I don't think that
makes sense for a DB connection.  The connection command returns a
resource that could be different on each request depending on if
you've worked on different resources.

You could just do this:
$GLOBALS['SITE_DB'] = @mysql_pconnect("localhost", $DBUser, $DBPass);

Then inside your function reference it like this:
mysql_query($sql, $GLOBALS['SITE_DB']);

This would be an easy mass find/replace that you could do.  Global
variables are evil though.

I personally use the registry pattern to hold an instance of the
database connection that can be lazy loaded whenever I need it.  Then
inside of my gateway objects I pass that instance in the constructor
so they only have to know how to work with its interface.  If you're
okay with using object that might be a nice road to travel.  You could
also use the singleton pattern but I would advise against that because
what if you wanted 2 instances for different databases?  I've never
ran across this myself but you never know.  Plus it makes unit testing
a little tricky since you can't mock it as easily.

Hopefully something in all this will help you to an answer.

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux