]> git.mxchange.org Git - friendica.git/blobdiff - include/dba.php
Merge pull request #2859 from rabuzarus/0510-update_fullcalendar
[friendica.git] / include / dba.php
index cae045d874cb384e5d4dac8176175a30acdaac90..86a3762b44f041945891eca407e5e31269fd7b77 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+require_once("dbm.php");
 
 # if PDO is avaible for mysql, use the new database abstraction
 # TODO: PDO is disabled for release 3.3. We need to investigate why
@@ -65,6 +66,8 @@ class dba {
                        if(! mysqli_connect_errno()) {
                                $this->connected = true;
                        }
+                       if (isset($a->config["system"]["db_charset"]))
+                               $this->db->set_charset($a->config["system"]["db_charset"]);
                }
                else {
                        $this->mysqli = false;
@@ -72,6 +75,8 @@ class dba {
                        if($this->db && mysql_select_db($db,$this->db)) {
                                $this->connected = true;
                        }
+                       if (isset($a->config["system"]["db_charset"]))
+                               mysql_set_charset($a->config["system"]["db_charset"], $this->db);
                }
                if(! $this->connected) {
                        $this->db = null;
@@ -86,6 +91,23 @@ class dba {
                return $this->db;
        }
 
+       /**
+        * @brief Returns the MySQL server version string
+        * 
+        * This function discriminate between the deprecated mysql API and the current
+        * object-oriented mysqli API. Example of returned string: 5.5.46-0+deb8u1
+        *
+        * @return string
+        */
+       public function server_info() {
+               if ($this->mysqli) {
+                       $return = $this->db->server_info;
+               } else {
+                       $return = mysql_get_server_info($this->db);
+               }
+               return $return;
+       }
+
        public function q($sql, $onlyquery = false) {
                global $a;
 
@@ -94,6 +116,14 @@ class dba {
 
                $this->error = '';
 
+               // Check the connection (This can reconnect the connection - if configured)
+               if ($this->mysqli)
+                       $connected = $this->db->ping();
+               else
+                       $connected = mysql_ping($this->db);
+
+               $connstr = ($connected ? "Connected": "Disonnected");
+
                $stamp1 = microtime(true);
 
                if($this->mysqli)
@@ -106,6 +136,9 @@ class dba {
 
                $a->save_timestamp($stamp1, "database");
 
+               if (strtolower(substr($sql, 0, 6)) != "select")
+                       $a->save_timestamp($stamp1, "database_write");
+
                if(x($a->config,'system') && x($a->config['system'],'db_log')) {
                        if (($duration > $a->config["system"]["db_loglimit"])) {
                                $duration = round($duration, 3);
@@ -118,14 +151,17 @@ class dba {
                }
 
                if($this->mysqli) {
-                       if($this->db->errno)
+                       if($this->db->errno) {
                                $this->error = $this->db->error;
+                               $this->errorno = $this->db->errno;
+                       }
+               } elseif(mysql_errno($this->db)) {
+                       $this->error = mysql_error($this->db);
+                       $this->errorno = mysql_errno($this->db);
                }
-               elseif(mysql_errno($this->db))
-                               $this->error = mysql_error($this->db);
 
                if(strlen($this->error)) {
-                       logger('dba: ' . $this->error);
+                       logger('DB Error ('.$connstr.') '.$this->errorno.': '.$this->error);
                }
 
                if($this->debug) {
@@ -230,6 +266,15 @@ class dba {
                }
        }
 
+       function connected() {
+               if ($this->mysqli)
+                       $connected = $this->db->ping();
+               else
+                       $connected = mysql_ping($this->db);
+
+               return $connected;
+       }
+
        function __destruct() {
                if ($this->db)
                        if($this->mysqli)
@@ -340,4 +385,3 @@ function dbesc_array(&$arr) {
 function dba_timer() {
        return microtime(true);
 }
-