Piwik 的数据库调用主要分成来源于两种情况:后台管理时候,跟踪用户的时候

  1. 后台管理时候
    在后台管理的时候,piwik 的dao定义在 piwik 里面,主要使用的是
    Piwik 类里面的 createDatabaseObject 方法
    Zend_Registry::set(‘db’,$db)
    我们使用 postgreSQL 的时候使用的是
    Zend_Registry::set(‘pg’,$pg)
    调用的方法很简单,直接使用

            if (isset($GLOBALS['PIWIK_USE_PG']) && $GLOBALS['PIWIK_USE_PG'] == true) {
                    $db = Zend_Registry::get('pg');
            }else{
                    $db = Zend_Registry::get('db');
            }
    
  2. 跟踪用户的时候
    初始化数据库的连接是在core/Tracker.php里面
    类Piwik_tracker_Visit里面的connectDatabaseIfNotConnected()方法负责干这个活

        public static function connectDatabaseIfNotConnected()
        {
            if (!is_null(self::$db)) {
                return;
            }
    
            try {
                $db = null;
                Piwik_PostEvent('Tracker.createDatabase', $db);
                if (is_null($db)) {
                    $db = self::connectPiwikTrackerDb();
                }
                self::$db = $db;
            } catch (Exception $e) {
                throw new Piwik_Tracker_Db_Exception($e->getMessage(), $e->getCode());
            }
    
            //初始化pg连接
            if ($GLOBALS['PIWIK_USE_PG'] == true) {
                try {
                    $pg = null;
                    Piwik_PostEvent('Tracker.createDatabase', $pg);
                    if (is_null($pg)) {
                        $pg = self::connectPiwikTrackerPg();
                    }
                    self::$pg = $pg;
                } catch (Exception $e) {
                    throw new Piwik_Tracker_Db_Exception($e->getMessage(), $e->getCode());
                }
            }
        }
    
        /**
         * @return Piwik_Tracker_Db
         */
        public static function getDatabase()
        {
            return self::$db;
        }
    
        /**
         * @return Piwik_Tracker_Db
         */
        public static function getPostgreSQL()
        {
            return self::$pg;
        }
    

    后面的两个方法,返回生成好的数据库连接对象

  3. 公共使用方法
    在plugins里面,可以使用 core/PluginsFunctions/Sql.php 中的方法来使用 Piwik_Sql
    这个类提供了很多很方便使用的方法,而且这个方式在后台和跟踪模式下面都可以很好的使用

            if (isset($GLOBALS['PIWIK_USE_PG']) && $GLOBALS['PIWIK_USE_PG'] == true) {
                if (!empty($GLOBALS['PIWIK_TRACKER_MODE'])) {
                    $db = Piwik_Tracker::getPostgreSQL();
                }
                if ($db === null) {
                    $db = Zend_Registry::get('pg');
                }
            }else{
                if (!empty($GLOBALS['PIWIK_TRACKER_MODE'])) {
                    $db = Piwik_Tracker::getDatabase();
                }
                if ($db === null) {
                    $db = Zend_Registry::get('db');
                }
            }
    

     

    本文摘自っ凜風と舞雪に: Piwik 数据库调用 API 整理