[pmwiki-devel] More database standards

marc gmane at auxbuss.com
Thu Dec 14 06:40:18 CST 2006


Crisses said...
> 
> On Dec 13, 2006, at 2:11 PM, marc wrote:
> > To complicate matters, where there is more than one database, you  
> > could
> > be passing around multiple connection names. In addition, how is a
> > recipe writer to cater for the situation where one table comes from  
> > one
> > db and a second from another? And perhaps a third. Or a fourth.
> >
> > Is there a proposed solution for this?
> 
> I don't know.  I know how I've handled it for AuthUserDBase so far.   
> I've used SDVA and given a sample sql script for how to set up the  
> database, but only for the standalone version.  The very nature of  
> AuthUserDBase was to share the login settings of another database  
> already managed by another program (say vBulletin, Joomla!, Drupal,  
> Moodle.....or now, with ADOdb, maybe even LDAP?).
> 
> I had to set default values, but allow people to change them.  I've  
> added a hook for an admin-created function to do the encryption for  
> the database, since I can't predict the encryption methods used by  
> every program out there, and the vBulletin one was double MD5 with a  
> salt.
> 
> So, I suggest you wrap your definitions in SDVA for arrays, SDV for  
> variables, and let the admin sort it out, get something into a  
> testing phase, document what you can, and get feedback from people.

No, that's not it. Consider a recipe that needs to open a db. Which db 
does it open? Now, the recipe needs to perform a SELECT on a table. 
Which table, and what name?

It's the same issue that you have with AuthUserDb, but in a general 
rather than specific case.

Anyway, I've settled on a PmWiki-ish way to handle this that may or may 
not work for others. It can still utilise the SDV() approach - to 
maintain that mechanism.

The nub of it is a two-dimensional array that would usually live in 
(farm)config.php. Something like:

  $DBTables = array (
    'products' => array ('database' => $liveDb, 'table' => 'products')
    'members'  => array ('database' => $testDb, 'table' => 'users')
  );

This can then be used in recipes via [1]:

  global $DBTables;

and, say:

  $db = ADOdbConnect($DBTables['products']['database']);
and
  $sql = "SELECT * FROM {$DBTables['products']['table']}


Hopefully, this makes the problem, and my suggested solution, a bit 
clearer.

-- 
Best,
Marc

[1] Although, personally, I prefer to do 

  global $DBTables;
  extract ($DBTables['products']);

  $db = ADOdbConnect($database);
  $sql = "SELECT * FROM $table





More information about the pmwiki-devel mailing list