[development] External database handling

Larry Garfield larry at garfieldtech.com
Fri Aug 22 05:24:12 UTC 2008

On Thursday 21 August 2008 10:21:37 pm Chris Johnson wrote:
> Is it generally desirable that contributed modules use the Drupal
> database abstraction whenever possible when accessing external
> databases?  That is, is it generally preferable to use db_query() and
> friends, instead of mysql_connect(), mysql_query(), etc. whenever
> possible?

Yes, very much so.  All of the security system is built into the abstraction 
layer; using mysql_query() directly means you're totally on your own for 

> I'd especially like to chat with the folks working on the DB layer for
> D7.  It would be nice to provide an interface to allow adding an
> additional DB programmatically from the contrib module.
> ..chris

Well hi there! :-)

What you describe was absolutely an issue in the D6 and earlier DB layer.  The 
new DB layer is still not perfect, but has improved on it in two ways:

1) The $databases value is always an array.  It can be a flattened array, as 
some layers are optional, but since the installer populates it in the first 
place it will in almost every case already be an array.  

2) You can actually instantiate a connection object directly.  I wouldn't 
recommend it as then the core system can't switch to it, but it's 
possible. :-)

3) (Nobody expects the Spanish Inquisition!)  The db_*() functions are all 
dumb wrappers.  You can grab a database connection with 
Database::getConnection($key) and then do everything after that with method 
calls; $db->query(), $db->insert(), $db->select(), etc.  So if you want to 
use a given database connection and just pull yourself out of the 
Drupal "active database" definition entirely, you can do so.

It's still not perfect, though, I agree.  If you have a suggestion for how to 
make the connection management more flexible without hurting performance (it 
is along the critical path, so we have to be careful) please post an issue.  
Just because the mega-patch landed doesn't mean we're done changing things 
yet. :-)

Larry Garfield
larry at garfieldtech.com

More information about the development mailing list