Piwik 的数据库调用主要分成来源于两种情况:后台管理时候,跟踪用户的时候
- 后台管理时候
在后台管理的时候,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'); }
- 跟踪用户的时候
初始化数据库的连接是在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; }
后面的两个方法,返回生成好的数据库连接对象
- 公共使用方法
在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 整理