Index: trunk/lib/App.inc.php
===================================================================
--- trunk/lib/App.inc.php	(revision 809)
+++ trunk/lib/App.inc.php	(revision 810)
@@ -288,50 +288,67 @@
      *
      * @access public
-     * @param  array    $param     Array of parameters (key => val pairs).
-     */
-    public function setParam($param=null)
-    {
-        if (isset($param) && is_array($param)) {
-            // Merge new parameters with old overriding old ones that are passed.
-            $this->_params = array_merge($this->_params, $param);
-
-            if ($this->running) {
-                // Params that require additional processing if set during runtime.
-                foreach ($param as $key => $val) {
-                    switch ($key) {
-                    case 'namespace':
-                        $this->logMsg(sprintf('Setting namespace not allowed', null), LOG_WARNING, __FILE__, __LINE__);
-                        return false;
-
-                    case 'session_name':
-                        session_name($val);
-                        return true;
-
-                    case 'session_use_cookies':
-                        if (session_status() !== PHP_SESSION_ACTIVE) {
-                            ini_set('session.use_cookies', $val);
-                        } else {
-                            $this->logMsg('Unable to set session_use_cookies; session is already active', LOG_NOTICE, __FILE__, __LINE__);
-                        }
-                        return true;
-
-                    case 'error_reporting':
-                        ini_set('error_reporting', $val);
-                        return true;
-
-                    case 'display_errors':
-                        ini_set('display_errors', $val);
-                        return true;
-
-                    case 'log_errors':
-                        ini_set('log_errors', true);
-                        return true;
-
-                    case 'log_directory':
-                        if (is_dir($val) && is_writable($val)) {
-                            ini_set('error_log', $val . '/' . $this->getParam('php_error_log'));
-                        }
-                        return true;
+     * @param  array    $params     Array of parameters (key => val pairs).
+     */
+    public function setParam(Array $params)
+    {
+        if (!isset($params) || !is_array($params)) {
+            trigger_error(sprintf('%s failed; not an array: %s', __METHOD__, getDump($params, false, SC_DUMP_PRINT_R)), E_USER_ERROR);
+        }
+
+        // Merge new parameters with old overriding old ones that are passed.
+        $this->_params = array_merge($this->_params, $params);
+
+        if ($this->running) {
+            // Params that require additional processing if set during runtime.
+            foreach ($params as $key => $val) {
+                switch ($key) {
+                case 'namespace':
+                    $this->logMsg(sprintf('Setting namespace not allowed', null), LOG_WARNING, __FILE__, __LINE__);
+                    break;
+
+                case 'session_name':
+                    session_name($val);
+                    break;
+
+                case 'session_use_cookies':
+                    if (session_status() !== PHP_SESSION_ACTIVE) {
+                        ini_set('session.use_cookies', $val);
+                    } else {
+                        $this->logMsg('Unable to set session_use_cookies; session is already active', LOG_NOTICE, __FILE__, __LINE__);
                     }
+                    break;
+
+                case 'error_reporting':
+                    ini_set('error_reporting', $val);
+                    break;
+
+                case 'php_timezone':
+                    // Set timezone used by PHP.
+                    $this->setTimezone($val);
+                    break;
+
+                case 'db_timezone':
+                    // Set timezone used by MySQL.
+                    if (true === $this->getParam('enable_db_pdo')) {
+                        $this->pdo->setParam(['timezone' => $val]);
+                    }
+                    if (true === $this->getParam('enable_db')) {
+                        $this->db->setParam(['timezone' => $val]);
+                    }
+                    break;
+
+                case 'display_errors':
+                    ini_set('display_errors', $val);
+                    break;
+
+                case 'log_errors':
+                    ini_set('log_errors', true);
+                    break;
+
+                case 'log_directory':
+                    if (is_dir($val) && is_writable($val)) {
+                        ini_set('error_log', $val . '/' . $this->getParam('php_error_log'));
+                    }
+                    break;
                 }
             }
Index: trunk/lib/DB.inc.php
===================================================================
--- trunk/lib/DB.inc.php	(revision 809)
+++ trunk/lib/DB.inc.php	(revision 810)
@@ -119,13 +119,23 @@
      * @param  array    $params     Array of parameters (key => val pairs).
      */
-    public function setParam($params)
-    {
-        $app =& App::getInstance();
-
-        if (isset($params) && is_array($params)) {
-            // Merge new parameters with old overriding only those passed.
-            $this->_params = array_merge($this->_params, $params);
-        } else {
-            $app->logMsg(sprintf('Parameters are not an array: %s', $params), LOG_ERR, __FILE__, __LINE__);
+    public function setParam(Array $params)
+    {
+        if (!isset($params) || !is_array($params)) {
+            trigger_error(sprintf('%s failed; not an array: %s', __METHOD__, getDump($params, false, SC_DUMP_PRINT_R)), E_USER_ERROR);
+        }
+
+        // Merge new parameters with old overriding only those passed.
+        $this->_params = array_merge($this->_params, $params);
+
+        if ($this->isConnected()) {
+            // Params that require additional processing if set during runtime.
+            foreach ($params as $key => $val) {
+                switch ($key) {
+                case 'timezone':
+                    // Set timezone used by MySQL.
+                    $this->query(sprintf("SET time_zone = '%s';", $this->escapeString($val)));
+                    break;
+                }
+            }
         }
     }
Index: trunk/lib/Email.inc.php
===================================================================
--- trunk/lib/Email.inc.php	(revision 809)
+++ trunk/lib/Email.inc.php	(revision 810)
@@ -104,5 +104,5 @@
      * @since   28 Nov 2005 12:59:41
      */
-    public function __construct($params=null)
+    public function __construct(Array $params=[])
     {
         $app =& App::getInstance();
Index: trunk/lib/Navigation.inc.php
===================================================================
--- trunk/lib/Navigation.inc.php	(revision 809)
+++ trunk/lib/Navigation.inc.php	(revision 810)
@@ -55,5 +55,5 @@
      * Navigation constructor.
      */
-    public function __construct($params=null)
+    public function __construct(Array $params=[])
     {
         $app =& App::getInstance();
Index: trunk/lib/PDO.inc.php
===================================================================
--- trunk/lib/PDO.inc.php	(revision 809)
+++ trunk/lib/PDO.inc.php	(revision 810)
@@ -103,5 +103,5 @@
      * @param string $params    Configuration parameters for this object.
      */
-    public function __construct($params=null)
+    public function __construct(Array $params=[])
     {
         // Set custom parameters.
@@ -131,9 +131,23 @@
      * @param  array $params   Array of param keys and values to set.
      */
-    public function setParam($params=null)
-    {
-        if (isset($params) && is_array($params)) {
-            // Merge new parameters with old overriding only those passed.
-            $this->_params = array_merge($this->_params, $params);
+    public function setParam(Array $params)
+    {
+        if (!isset($params) || !is_array($params)) {
+            trigger_error(sprintf('%s failed; not an array: %s', __METHOD__, getDump($params, false, SC_DUMP_PRINT_R)), E_USER_ERROR);
+        }
+
+        // Merge new parameters with old overriding only those passed.
+        $this->_params = array_merge($this->_params, $params);
+
+        if ($this->isConnected()) {
+            // Params that require additional processing if set during runtime.
+            foreach ($params as $key => $val) {
+                switch ($key) {
+                case 'timezone':
+                    // Set timezone used by MySQL.
+                    $this->query(sprintf("SET time_zone = %s;", $this->quote($val)));
+                    break;
+                }
+            }
         }
     }
