]> git.joonet.de Git - adminer.git/commitdiff
Respect column type with anywhere comparison
authorjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Tue, 1 Sep 2009 14:24:08 +0000 (14:24 +0000)
committerjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Tue, 1 Sep 2009 14:24:08 +0000 (14:24 +0000)
Search LIKE '%%' with text columns

git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@1056 7c3ca157-0c34-0410-bff1-cbf682f78f5c

editor/include/adminer.inc.php

index 89873676f84eba399646eda34a3d772e38db2131..10105a35a2d141de20225dfc501e9dce1c1c3652 100644 (file)
@@ -201,21 +201,17 @@ ORDER BY ORDINAL_POSITION"); //! requires MySQL 5
        function selectSearchProcess($fields, $indexes) {
                $return = array();
                foreach ((array) $_GET["where"] as $val) {
-                       if (strlen("$val[col]$val[val]")) {
-                               $value = $this->processInput($fields[$val["col"]], $val["val"]);
-                               $cond = ($value == "NULL" ? " IS" : ($val["op"] == "=" ? " =" : " LIKE")) . " $value";
-                               if (strlen($val["col"])) {
-                                       $return[] = idf_escape($val["col"]) . $cond;
-                               } else {
-                                       // find anywhere
-                                       $cols = array();
-                                       foreach ($fields as $name => $field) {
-                                               if (is_numeric($val["val"]) || !ereg('int|float|double|decimal', $field["type"])) {
-                                                       $cols[] = $name;
-                                               }
+                       $col = $val["col"];
+                       if (strlen("$col$val[val]")) {
+                               $conds = array();
+                               foreach ((strlen($col) ? array($col => $fields[$col]) : $fields) as $name => $field) {
+                                       if (strlen($col) || is_numeric($val["val"]) || !ereg('int|float|double|decimal', $field["type"])) {
+                                               $text_type = ereg('char|text|enum|set', $field["type"]);
+                                               $value = $this->processInput($field, (strlen($val["val"]) && $text_type && strpos($val["val"], "%") === false ? "%$val[val]%" : $val["val"]));
+                                               $conds[] = idf_escape($name) . ($value == "NULL" ? " IS" : ($val["op"] != "=" && $text_type ? " LIKE" : " =")) . " $value";
                                        }
-                                       $return[] = ($cols ? "(" . implode("$cond OR ", array_map('idf_escape', $cols)) . "$cond)" : "0");
                                }
+                               $return[] = ($conds ? "(" . implode(" OR ", $conds) . ")" : "0");
                        }
                }
                return $return;