This is a follow up to a question posted by Sam in my DB-2-MDB2 post. The question was if you can reuse an exisitng database connection you've already established and not have MDB2 creating a second connection.
When using a non-persistent connection
No worries in this case. No new connection will be established. As the PHP manual states:
If a second call is made to mysql_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned.
That is, if you don't set the fourth parameter to
true. This parameter forces a new connection. BTW, in MDB2 if you do want to force a new connection, you have to set
new_link in the DSN string to
Bottom line, if you don't do anything special, the existing connection will be reused by MDB2. You can always verify that this is the case by calling
phpinfo(INFO_MODULES); and looking in the "mysql" section.
When using a persistent connection
When using a persistent connection you have to do some additional steps to ensure that the same persistent connection is used by MDB2.
- Tell MDB2 that you want a persistent connection -
- Tell MDB2 which connection you want to use -
$mdb2->connection = $link;, where
$linkis your existing connection
$mdb2->opened_persistent = true;
Here's an example:
// somewhere you've established a connection $link = mysql_pconnect('localhost', 'root', ''); mysql_select_db('test', $link); echo $link; // e.g. Resource id #5 // Create MDB2 object require_once 'MDB2.php'; $dsn = 'mysql://root@localhost/test'; $mdb2 =& MDB2::factory($dsn); // reuse your connection $mdb2->setOption('persistent', true); $mdb2->opened_persistent = true; $mdb2->connection = $link; // connect $mdb2->connect(); echo $mdb2->connection; // Resource id #5 // check the "mysql" part to be sure phpinfo(INFO_MODULES);
This entry was posted on Thursday, January 4th, 2007 and is filed under mdb2, mysql, PEAR. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.