diff --git a/app/Tygh/Database.php b/app/Tygh/Database.php index 410cfc0..186b836 100644 --- a/app/Tygh/Database.php +++ b/app/Tygh/Database.php @@ -448,86 +448,56 @@ class Database } } - switch ($ph) { - // integer - case '?i': - $pattern = self::strReplace($ph, self::intVal($data[$k]), $pattern, $offset); // Trick to convert int's and longint's - break; - - // string - case '?s': - $pattern = self::strReplace($ph, "'" . self::$db->escape($data[$k]) . "'", $pattern, $offset); - break; - - // string for LIKE operator - case '?l': - $pattern = self::strReplace($ph, "'" . self::$db->escape(str_replace("\\", "\\\\", $data[$k])) . "'", $pattern, $offset); - break; - - // float - case '?d': - if ($data[$k] == INF || $data[$k] > PHP_INT_MAX) { - $data[$k] = PHP_INT_MAX; - } - $pattern = self::strReplace($ph, sprintf('%01.2f', $data[$k]), $pattern, $offset); - break; - - // array - // @FIXME: add trim - case '?a': - $data[$k] = is_array($data[$k]) ? $data[$k] : array($data[$k]); - if (!empty($data[$k])) { - $pattern = self::strReplace($ph, implode(', ', self::filterData($data[$k], true)), $pattern, $offset); - } else { - if (Debugger::isActive() || fn_is_development()) { - trigger_error('Empty array was passed into SQL statement IN()', E_USER_DEPRECATED); - } - $pattern = self::strReplace($ph, 'NULL', $pattern, $offset); - } - break; - - // array of integer - // FIXME: add trim - case '?n': - $data[$k] = is_array($data[$k]) ? $data[$k] : array($data[$k]); - $pattern = self::strReplace($ph, !empty($data[$k]) ? implode(', ', array_map(array('self', 'intVal'), $data[$k])) : "''", $pattern, $offset); - break; - - // update/condition with and - case '?u': - case '?w': - $clue = ($ph == '?u') ? ', ' : ' AND '; - $q = implode($clue, self::filterData($data[$k], false)); - $pattern = self::strReplace($ph, $q, $pattern, $offset); - break; - - // insert - case '?e': - $filtered = self::filterData($data[$k], true); - $pattern = self::strReplace($ph, - "(" . implode(', ', array_keys($filtered)) . ") VALUES (" . implode(', ', array_values($filtered)) . ")", $pattern, - $offset); - break; - - // insert multi - case '?m': - $values = array(); - foreach ($data[$k] as $value) { - $filtered = self::filterData($value, true); - $values[] = "(" . implode(', ', array_values($filtered)) . ")"; + if ($ph == '?i') { // integer + $pattern = self::strReplace($ph, self::intVal($data[$k]), $pattern, $offset); // Trick to convert int's and longint's + + } elseif ($ph == '?s') { // string + + $pattern = self::strReplace($ph, "'" . self::$db->escape($data[$k]) . "'", $pattern, $offset); + + } elseif ($ph == '?l') { // string for LIKE operator + $pattern = self::strReplace($ph, "'" . self::$db->escape(str_replace("\\", "\\\\", $data[$k])) . "'", $pattern, $offset); + + } elseif ($ph == '?d') { // float + $pattern = self::strReplace($ph, sprintf('%01.2f', $data[$k]), $pattern, $offset); + + } elseif ($ph == '?a') { // array FIXME: add trim + $data[$k] = !is_array($data[$k]) ? array($data[$k]) : $data[$k]; + if (!empty($data[$k])) { + $pattern = self::strReplace($ph, implode(', ', self::filterData($data[$k], true)), $pattern, $offset); + } else { + if (Debugger::isActive() || fn_is_development()) { + trigger_error('Empty array was passed into SQL statement IN()', E_USER_DEPRECATED); } - $pattern = self::strReplace($ph, "(" . implode(', ', array_keys($filtered)) . ") VALUES " . implode(', ', $values), $pattern, $offset); - break; - - // field/table/database name - case '?f': - $pattern = self::strReplace($ph, self::field($data[$k]), $pattern, $offset); - break; - - // prepared statement - case '?p': - $pattern = self::strReplace($ph, self::tablePrefixReplace('?:', self::$table_prefix, $data[$k]), $pattern, $offset); - break; + $pattern = self::strReplace($ph, 'NULL', $pattern, $offset); + } + + } elseif ($ph == '?n') { // array of integer FIXME: add trim + $data[$k] = !is_array($data[$k]) ? array($data[$k]) : $data[$k]; + $pattern = self::strReplace($ph, !empty($data[$k]) ? implode(', ', array_map(array('self', 'intVal'), $data[$k])) : "''", $pattern, $offset); + + } elseif ($ph == '?u' || $ph == '?w') { // update/condition with and + $clue = ($ph == '?u') ? ', ' : ' AND '; + $q = implode($clue, self::filterData($data[$k], false)); + $pattern = self::strReplace($ph, $q, $pattern, $offset); + + } elseif ($ph == '?e') { // insert + $filtered = self::filterData($data[$k], true); + $pattern = self::strReplace($ph, "(" . implode(', ', array_keys($filtered)) . ") VALUES (" . implode(', ', array_values($filtered)) . ")", $pattern, $offset); + + } elseif ($ph == '?m') { // insert multi + $values = array(); + foreach ($data[$k] as $value) { + $filtered = self::filterData($value, true); + $values[] = "(" . implode(', ', array_values($filtered)) . ")"; + } + $pattern = self::strReplace($ph, "(" . implode(', ', array_keys($filtered)) . ") VALUES " . implode(', ', $values), $pattern, $offset); + + } elseif ($ph == '?f') { // field/table/database name + $pattern = self::strReplace($ph, self::field($data[$k]), $pattern, $offset); + + } elseif ($ph == '?p') { // prepared statement + $pattern = self::strReplace($ph, self::tablePrefixReplace('?:', self::$table_prefix, $data[$k]), $pattern, $offset); } } } @@ -695,10 +665,6 @@ class Database */ protected static function intVal($int) { - if ($int == INF || $int > PHP_INT_MAX) { - $int = PHP_INT_MAX; - } - return $int + 0; }