]> git.mxchange.org Git - friendica.git/blobdiff - include/dba.php
Event: Prevent SQL errors with events without end
[friendica.git] / include / dba.php
index 986509369acd76ebd79db429c746db0f52cff36e..fc54eefeb36953f609c6a7ebfed886cb37ba090f 100644 (file)
@@ -1,9 +1,10 @@
 <?php
+
+use Friendica\Core\L10n;
 use Friendica\Core\System;
 use Friendica\Database\DBM;
 use Friendica\Database\DBStructure;
-
-require_once('include/datetime.php');
+use Friendica\Util\DateTimeFormat;
 
 /**
  * @class MySQL database class
@@ -21,7 +22,7 @@ class dba {
        private static $errorno = 0;
        private static $affected_rows = 0;
        private static $in_transaction = false;
-       private static $relation = array();
+       private static $relation = [];
 
        public static function connect($serveraddr, $user, $pass, $db, $install = false) {
                if (!is_null(self::$db)) {
@@ -55,7 +56,7 @@ class dba {
                if ($install) {
                        if (strlen($server) && ($server !== 'localhost') && ($server !== '127.0.0.1')) {
                                if (! dns_get_record($server, DNS_A + DNS_CNAME + DNS_PTR)) {
-                                       self::$error = sprintf(t('Cannot locate DNS info for database server \'%s\''), $server);
+                                       self::$error = L10n::t('Cannot locate DNS info for database server \'%s\'', $server);
                                        self::$connected = false;
                                        self::$db = null;
                                        return false;
@@ -100,6 +101,7 @@ class dba {
                        if (!$install) {
                                System::unavailable();
                        }
+                       return false;
                }
                $a->save_timestamp($stamp1, "network");
 
@@ -157,7 +159,7 @@ class dba {
                }
 
                // Only do the explain on "select", "update" and "delete"
-               if (!in_array(strtolower(substr($query, 0, 6)), array("select", "update", "delete"))) {
+               if (!in_array(strtolower(substr($query, 0, 6)), ["select", "update", "delete"])) {
                        return;
                }
 
@@ -187,7 +189,7 @@ class dba {
 
                        if ($log) {
                                $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
-                               @file_put_contents($a->config["system"]["db_log_index"], datetime_convert()."\t".
+                               @file_put_contents($a->config["system"]["db_log_index"], DateTimeFormat::utcNow()."\t".
                                                $row['key']."\t".$row['rows']."\t".$row['Extra']."\t".
                                                basename($backtrace[1]["file"])."\t".
                                                $backtrace[1]["line"]."\t".$backtrace[2]["function"]."\t".
@@ -253,8 +255,8 @@ class dba {
         * @return string The input SQL string modified if necessary.
         */
        public static function clean_query($sql) {
-               $search = array("\t", "\n", "\r", "  ");
-               $replace = array(' ', ' ', ' ', ' ');
+               $search = ["\t", "\n", "\r", "  "];
+               $replace = [' ', ' ', ' ', ' '];
                do {
                        $oldsql = $sql;
                        $sql = str_replace($search, $replace, $sql);
@@ -324,7 +326,7 @@ class dba {
 
                // Renumber the array keys to be sure that they fit
                $i = 0;
-               $args = array();
+               $args = [];
                foreach ($params AS $param) {
                        // Avoid problems with some MySQL servers and boolean values. See issue #3645
                        if (is_bool($param)) {
@@ -408,7 +410,7 @@ class dba {
                                // There are SQL statements that cannot be executed with a prepared statement
                                $parts = explode(' ', $orig_sql);
                                $command = strtolower($parts[0]);
-                               $can_be_prepared = in_array($command, array('select', 'update', 'insert', 'delete'));
+                               $can_be_prepared = in_array($command, ['select', 'update', 'insert', 'delete']);
 
                                // The fallback routine is called as well when there are no arguments
                                if (!$can_be_prepared || (count($args) == 0)) {
@@ -437,7 +439,7 @@ class dba {
                                }
 
                                $params = '';
-                               $values = array();
+                               $values = [];
                                foreach ($args AS $param => $value) {
                                        if (is_int($args[$param])) {
                                                $params .= 'i';
@@ -453,7 +455,7 @@ class dba {
 
                                if (count($values) > 0) {
                                        array_unshift($values, $params);
-                                       call_user_func_array(array($stmt, 'bind_param'), $values);
+                                       call_user_func_array([$stmt, 'bind_param'], $values);
                                }
 
                                if (!$stmt->execute()) {
@@ -492,7 +494,7 @@ class dba {
                                $duration = round($duration, 3);
                                $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
 
-                               @file_put_contents($a->config["system"]["db_log"], datetime_convert()."\t".$duration."\t".
+                               @file_put_contents($a->config["system"]["db_log"], DateTimeFormat::utcNow()."\t".$duration."\t".
                                                basename($backtrace[1]["file"])."\t".
                                                $backtrace[1]["line"]."\t".$backtrace[2]["function"]."\t".
                                                substr(self::replace_parameters($sql, $args), 0, 2000)."\n", FILE_APPEND);
@@ -564,12 +566,12 @@ class dba {
                        return false;
                }
 
-               $fields = array();
+               $fields = [];
 
                $array_element = each($condition);
                $array_key = $array_element['key'];
                if (!is_int($array_key)) {
-                       $fields = array($array_key);
+                       $fields = [$array_key];
                }
 
                $stmt = self::select($table, $fields, $condition, ['limit' => 1]);
@@ -659,33 +661,41 @@ class dba {
        /**
         * @brief Fetch a single row
         *
-        * @param PDOStatement|mysqli_result|mysqli_stmt $stmt statement object
+        * @param mixed $stmt statement object
         * @return array current row
         */
        public static function fetch($stmt) {
+               $a = get_app();
+
+               $stamp1 = microtime(true);
+
+               $columns = [];
+
                if (!is_object($stmt)) {
                        return false;
                }
 
                switch (self::$driver) {
                        case 'pdo':
-                               return $stmt->fetch(PDO::FETCH_ASSOC);
+                               $columns = $stmt->fetch(PDO::FETCH_ASSOC);
+                               break;
                        case 'mysqli':
                                if (get_class($stmt) == 'mysqli_result') {
-                                       return $stmt->fetch_assoc();
+                                       $columns = $stmt->fetch_assoc();
+                                       break;
                                }
 
                                // This code works, but is slow
 
                                // Bind the result to a result array
-                               $cols = array();
+                               $cols = [];
 
-                               $cols_num = array();
+                               $cols_num = [];
                                for ($x = 0; $x < $stmt->field_count; $x++) {
                                        $cols[] = &$cols_num[$x];
                                }
 
-                               call_user_func_array(array($stmt, 'bind_result'), $cols);
+                               call_user_func_array([$stmt, 'bind_result'], $cols);
 
                                if (!$stmt->fetch()) {
                                        return false;
@@ -697,12 +707,14 @@ class dba {
                                $result = $stmt->result_metadata();
                                $fields = $result->fetch_fields();
 
-                               $columns = array();
                                foreach ($cols_num AS $param => $col) {
                                        $columns[$fields[$param]->name] = $col;
                                }
-                               return $columns;
                }
+
+               $a->save_timestamp($stamp1, 'database');
+
+               return $columns;
        }
 
        /**
@@ -901,7 +913,7 @@ class dba {
                        if ((count($conditions) == 1) && ($field == array_keys($conditions)[0])) {
                                foreach ($rel_def AS $rel_table => $rel_fields) {
                                        foreach ($rel_fields AS $rel_field) {
-                                               $retval = self::delete($rel_table, array($rel_field => array_values($conditions)[0]), true, $callstack);
+                                               $retval = self::delete($rel_table, [$rel_field => array_values($conditions)[0]], true, $callstack);
                                                $commands = array_merge($commands, $retval);
                                        }
                                }
@@ -911,11 +923,11 @@ class dba {
                                $callstack[$qkey] = true;
 
                                // Fetch all rows that are to be deleted
-                               $data = self::select($table, array($field), $conditions);
+                               $data = self::select($table, [$field], $conditions);
 
                                while ($row = self::fetch($data)) {
                                        // Now we accumulate the delete commands
-                                       $retval = self::delete($table, array($field => $row[$field]), true, $callstack);
+                                       $retval = self::delete($table, [$field => $row[$field]], true, $callstack);
                                        $commands = array_merge($commands, $retval);
                                }
 
@@ -1027,7 +1039,7 @@ class dba {
         *
         * @return boolean was the update successfull?
         */
-       public static function update($table, $fields, $condition, $old_fields = array()) {
+       public static function update($table, $fields, $condition, $old_fields = []) {
 
                if (empty($table) || empty($fields) || empty($condition)) {
                        logger('Table, fields and condition have to be set');
@@ -1054,7 +1066,7 @@ class dba {
                                        $values = array_merge($condition, $fields);
                                        return self::insert($table, $values, $do_insert);
                                }
-                               $old_fields = array();
+                               $old_fields = [];
                        }
                }
 
@@ -1145,6 +1157,7 @@ class dba {
 
                $condition_string = self::buildCondition($condition);
 
+               $order_string = '';
                if (isset($params['order'])) {
                        $order_string = " ORDER BY ";
                        foreach ($params['order'] AS $fields => $order) {
@@ -1157,6 +1170,7 @@ class dba {
                        $order_string = substr($order_string, 0, -2);
                }
 
+               $limit_string = '';
                if (isset($params['limit']) && is_int($params['limit'])) {
                        $limit_string = " LIMIT " . $params['limit'];
                }
@@ -1249,7 +1263,7 @@ class dba {
                        return $stmt;
                }
 
-               $data = array();
+               $data = [];
                while ($row = self::fetch($stmt)) {
                        $data[] = $row;
                }
@@ -1284,17 +1298,27 @@ class dba {
         * @return boolean was the close successful?
         */
        public static function close($stmt) {
+               $a = get_app();
+
+               $stamp1 = microtime(true);
+
                if (!is_object($stmt)) {
                        return false;
                }
 
                switch (self::$driver) {
                        case 'pdo':
-                               return $stmt->closeCursor();
+                               $ret = $stmt->closeCursor();
+                               break;
                        case 'mysqli':
                                $stmt->free_result();
-                               return $stmt->close();
+                               $ret = $stmt->close();
+                               break;
                }
+
+               $a->save_timestamp($stamp1, 'database');
+
+               return $ret;
        }
 }