Example #1
0
 /**
  * Returns database object
  *
  * @param int $iFetchMode - fetch mode default numeric - 0
  *
  * @throws oxConnectionException error while initiating connection to DB
  *
  * @return oxLegacyDb
  */
 public static function getDb($iFetchMode = oxDb::FETCH_MODE_NUM)
 {
     if (defined('OXID_PHP_UNIT')) {
         if (isset(modDB::$unitMOD) && is_object(modDB::$unitMOD)) {
             return modDB::$unitMOD;
         }
     }
     if (self::$_oDB === null) {
         $oInst = self::getInstance();
         //setting configuration on the first call
         $oInst->setConfig(oxRegistry::get("oxConfigFile"));
         global $ADODB_SESSION_TBL, $ADODB_SESSION_CONNECT, $ADODB_SESSION_DRIVER, $ADODB_SESSION_USER, $ADODB_SESSION_PWD, $ADODB_SESSION_DB, $ADODB_SESS_LIFE, $ADODB_SESS_DEBUG;
         // session related parameters. don't change.
         //Tomas
         //the default setting is 3000 * 60, but actually changing this will give no effect as now redefinition of this constant
         //appears after OXID custom settings are loaded and $ADODB_SESS_LIFE depends on user settings.
         //You can find the redefinition of ADODB_SESS_LIFE @ oxconfig.php:: line ~ 390.
         $ADODB_SESS_LIFE = 3000 * 60;
         $ADODB_SESSION_TBL = "oxsessions";
         $ADODB_SESSION_DRIVER = self::_getConfigParam('_dbType');
         $ADODB_SESSION_USER = self::_getConfigParam('_dbUser');
         $ADODB_SESSION_PWD = self::_getConfigParam('_dbPwd');
         $ADODB_SESSION_DB = self::_getConfigParam('_dbName');
         $ADODB_SESSION_CONNECT = self::_getConfigParam('_dbHost');
         $ADODB_SESS_DEBUG = false;
         $oDb = new oxLegacyDb();
         $oDbInst = $oInst->_getDbInstance();
         $oDb->setConnection($oDbInst);
         self::$_oDB = $oDb;
     }
     self::$_oDB->setFetchMode($iFetchMode);
     return self::$_oDB;
 }
Example #2
0
 /**
  * Returns database object
  *
  * @param boolean $blAssoc default false
  *
  * @throws oxConnectionException error while initiating connection to DB
  *
  * @return ADOConnection
  */
 public static function getDb($blAssoc = false)
 {
     global $ADODB_FETCH_MODE;
     if ($blAssoc) {
         $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
     } else {
         $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
     }
     if (defined('OXID_PHP_UNIT')) {
         if (isset(modDB::$unitMOD) && is_object(modDB::$unitMOD)) {
             return modDB::$unitMOD;
         }
     }
     if (self::$_oDB !== null) {
         return self::$_oDB;
     }
     global $ADODB_CACHE_DIR;
     global $ADODB_DRIVER, $ADODB_SESSION_TBL, $ADODB_SESSION_CONNECT, $ADODB_SESSION_DRIVER, $ADODB_SESSION_USER, $ADODB_SESSION_PWD, $ADODB_SESSION_DB, $ADODB_SESS_LIFE, $ADODB_SESS_DEBUG;
     //adding exception handler for SQL errors
     $myConfig = self::getInstance()->getConfig();
     $iDebug = $myConfig->getConfigParam('iDebug');
     if ($iDebug) {
         include_once getShopBasePath() . 'core/adodblite/adodb-exceptions.inc.php';
     }
     // session related parameters. don't change.
     //Tomas
     //the default setting is 3000 * 60, but actually changing this will give no effect as now redefinition of this constant
     //appears after OXID custom settings are loaded and $ADODB_SESS_LIFE depends on user settings.
     //You can find the redefinition of ADODB_SESS_LIFE @ oxconfig.php:: line ~ 390.
     $ADODB_SESS_LIFE = 3000 * 60;
     $ADODB_SESSION_TBL = "oxsessions";
     $ADODB_SESSION_DRIVER = $myConfig->getConfigParam('dbType');
     $ADODB_SESSION_USER = $myConfig->getConfigParam('dbUser');
     $ADODB_SESSION_PWD = $myConfig->getConfigParam('dbPwd');
     $ADODB_SESSION_DB = $myConfig->getConfigParam('dbName');
     $ADODB_SESSION_CONNECT = $myConfig->getConfigParam('dbHost');
     $ADODB_SESS_DEBUG = false;
     $ADODB_CACHE_DIR = $myConfig->getConfigParam('sCompileDir');
     $sModules = '';
     if ($iDebug == 2 || $iDebug == 3 || $iDebug == 4 || $iDebug == 7) {
         $sModules = 'perfmon';
     }
     // log admin changes ?
     if ($myConfig->isAdmin() && $myConfig->getConfigParam('blLogChangesInAdmin')) {
         $sModules = ($sModules ? ':' : '') . 'oxadminlog';
     }
     self::$_oDB = ADONewConnection($myConfig->getConfigParam('dbType'), $sModules);
     $sVerPrefix = '';
     $sVerPrefix = '_ce';
     if (!self::$_oDB->connect($myConfig->getConfigParam('dbHost'), $myConfig->getConfigParam('dbUser'), $myConfig->getConfigParam('dbPwd'), $myConfig->getConfigParam('dbName'))) {
         $sConfig = join('', file(getShopBasePath() . 'config.inc.php'));
         if (strpos($sConfig, '<dbHost' . $sVerPrefix . '>') !== false && strpos($sConfig, '<dbName' . $sVerPrefix . '>') !== false) {
             header('location:setup/index.php');
             // pop to setup as there is something wrong
             oxUtils::getInstance()->showMessageAndExit("");
         } else {
             // notifying shop owner about connection problems
             $sFailedShop = isset($_REQUEST['shp']) ? addslashes($_REQUEST['shp']) : 'Base shop';
             $sDate = date('l dS of F Y h:i:s A');
             $sScript = $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING'];
             $sReferer = $_SERVER['HTTP_REFERER'];
             //sending a message to admin
             $sWarningSubject = 'Offline warning!';
             $sWarningBody = "\n                Database error in OXID eShop:\n                Date: {$sDate}\n                Shop: {$sFailedShop}\n\n                mysql error: " . self::$_oDB->errorMsg() . "\n                mysql error no: " . self::$_oDB->errorNo() . "\n\n                Script: {$sScript}\n                Referer: {$sReferer}";
             if ($sAdminEmail = $myConfig->getConfigParam('sAdminEmail')) {
                 include 'core/phpmailer/class.phpmailer.php';
                 $oMailer = new phpmailer();
                 $oMailer->isMail();
                 $oMailer->From = $sAdminEmail;
                 $oMailer->AddAddress($sAdminEmail);
                 $oMailer->Subject = $sWarningSubject;
                 $oMailer->Body = $sWarningBody;
                 $oMailer->send();
             }
             //only exception to default construction method
             $oEx = new oxConnectionException();
             $oEx->setMessage('EXCEPTION_CONNECTION_NODB');
             $oEx->setConnectionError($myConfig->getConfigParam('dbUser') . 's' . getShopBasePath() . self::$_oDB->errorMsg());
             throw $oEx;
         }
     }
     if ($iDebug == 2 || $iDebug == 3 || $iDebug == 4 || $iDebug == 7) {
         try {
             self::$_oDB->execute('truncate table adodb_logsql;');
         } catch (ADODB_Exception $e) {
             // nothing
         }
         self::$_oDB->logSQL(true);
     }
     self::$_oDB->cacheSecs = 60 * 10;
     // 10 minute caching
     self::$_oDB->execute('SET @@session.sql_mode = ""');
     if ($myConfig->isUtf()) {
         self::$_oDB->execute('SET NAMES "utf8"');
         self::$_oDB->execute('SET CHARACTER SET utf8');
         self::$_oDB->execute('SET CHARACTER_SET_CONNECTION = utf8');
         self::$_oDB->execute('SET CHARACTER_SET_DATABASE = utf8');
         self::$_oDB->execute('SET character_set_results = utf8');
         self::$_oDB->execute('SET character_set_server = utf8');
     } elseif ($myConfig->getConfigParam('sDefaultDatabaseConnection') != '') {
         self::$_oDB->execute('SET NAMES ' . $myConfig->getConfigParam('sDefaultDatabaseConnection'));
     }
     return self::$_oDB;
 }
Example #3
0
 public static function clearInstance()
 {
     oxDb::$_oDB = null;
 }