コード例 #1
0
 /**
  * Returns a MDB connection with the requested DSN.
  * A newnew MDB connection object is only created if no object with the
  * reuested DSN exists yet.
  *
  * IMPORTANT: In order for MDB to work properly it is necessary that
  * you make sure that you work with a reference of the original
  * object instead of a copy (this is a PHP4 quirk).
  *
  * For example:
  *     $mdb =& MDB::sngleton($dsn);
  *          ^^
  * And not:
  *     $mdb = MDB::singleton($dsn);
  *          ^^
  *
  * @param   mixed   $dsn      'data source name', see the MDB::parseDSN
  *                            method for a description of the dsn format.
  *                            Can also be specified as an array of the
  *                            format returned by MDB::parseDSN.
  * @param   mixed   $options  An associative array of option names and
  *                            their values.
  * @return  mixed   a newly created MDB connection object, or a MDB
  *                  error object on error
  * @access  public
  * @see     MDB::parseDSN
  */
 function &singleton($dsn = NULL, $options = FALSE)
 {
     if ($dsn) {
         $dsninfo = MDB::parseDSN($dsn);
         $dsninfo_default = array('phptype' => NULL, 'username' => NULL, 'password' => NULL, 'hostspec' => NULL, 'database' => NULL);
         $dsninfo = array_merge($dsninfo_default, $dsninfo);
         $keys = array_keys($GLOBALS['_MDB_databases']);
         for ($i = 0, $j = count($keys); $i < $j; ++$i) {
             $tmp_dsn = $GLOBALS['_MDB_databases'][$keys[$i]]->getDSN('array');
             if ($dsninfo['phptype'] == $tmp_dsn['phptype'] && $dsninfo['username'] == $tmp_dsn['username'] && $dsninfo['password'] == $tmp_dsn['password'] && $dsninfo['hostspec'] == $tmp_dsn['hostspec'] && $dsninfo['database'] == $tmp_dsn['database']) {
                 MDB::setOptions($GLOBALS['_MDB_databases'][$keys[$i]], $options);
                 return $GLOBALS['_MDB_databases'][$keys[$i]];
             }
         }
     } else {
         if (is_array($GLOBALS['_MDB_databases']) && reset($GLOBALS['_MDB_databases'])) {
             $db =& $GLOBALS['_MDB_databases'][key($GLOBALS['_MDB_databases'])];
             return $db;
         }
     }
     $db =& MDB::connect($dsn, $options);
     return $db;
 }