src/db/BuildSql.php
public function parseMap($mapField, $mapExp, $mapValue, $mapLink = 'AND')
    {
        $mapLink = ' ' . $mapLink . ' '; // 连接符
        $expRule = [
            ['>', '<', '>=', '<=', '!=', 'like', '<>', '='],
            ['in', 'not in', 'IN', 'NOT IN'],
            ['instr', 'INSTR'],
            ['between', 'BETWEEN'],
            ['or', 'OR'],
            ['_string', '_STRING'],
            ['find_in_set', 'FIND_IN_SET'],
        ];

        // '>', '<', '>=', '<=', '!=', 'like', '<>'
        if (in_array($mapExp, $expRule[0])) {
            $map = $mapField . '  ' . $mapExp . ' \'' . $mapValue . '\'';
        }
        // 'in', 'not in', 'IN', 'NOT IN'
        elseif (in_array($mapExp, $expRule[1])) {
            if (!$mapValue) {
                $map = $mapField . '  ' . $mapExp . ' (\'\')';
            } else {
                if (!is_array($mapValue) && stripos($mapValue, ',') !== false) {
                    $mapValue = explode(',', $mapValue);
                }
                $mapValue      = is_array($mapValue) ? $mapValue : (array) $mapValue;
                $commonInValue = '';
                foreach ($mapValue as $inValue) {
                    $commonInValue .= '\'' . $inValue . '\',';
                }
                $commonInValue = substr($commonInValue, 0, -1);
                $map           = $mapField . '  ' . $mapExp . ' (' . $commonInValue . ')';
            }
        }
        // 'instr', 'INSTR'
        elseif (in_array($mapExp, $expRule[2])) {
            $map = $mapExp . '(' . $mapField . ',\'' . $mapValue . '\')';
        }
        // 'between', 'BETWEEN'
        elseif (in_array($mapExp, $expRule[3])) {
            $map = $mapField . '  ' . $mapExp . ' \'' . $mapValue[0] . '\' AND \'' . $mapValue[1] . '\'';
        }
        // 'or', 'OR'
        elseif (in_array($mapExp, $expRule[4])) {
            if (count((array) $mapValue) == 2) {
                return $this->parseMap($mapField, $mapValue[0], $mapValue[1], strtoupper($mapExp));
            } else {
                $mapLink = ' ' . strtoupper($mapExp) . ' '; // 连接符
                $map     = $mapField . ' = \'' . $mapValue . '\'';
            }
        }
        // '_string', '_STRING'
        elseif (in_array($mapExp, $expRule[5])) {
            $map = $mapValue;
        }
        // 'find_in_set', 'FIND_IN_SET'
        elseif (in_array($mapExp, $expRule[6])) {
            $map = $mapExp . '(' . $mapValue . ', ' . $mapField . ')';
        } else {
            throw new Exception('SQL WHERE 参数错误 `' . $mapExp . '`');
        }
        return [$map, $mapLink];
    }
public function parseMap($mapField, $mapExp, $mapValue, $mapLink = 'AND')
    {
        $mapLink = ' ' . $mapLink . ' '; // 连接符
        $expRule = [
            ['>', '<', '>=', '<=', '!=', 'like', '<>', '='],
            ['in', 'not in', 'IN', 'NOT IN'],
            ['instr', 'INSTR'],
            ['between', 'BETWEEN'],
            ['or', 'OR'],
            ['_string', '_STRING'],
            ['find_in_set', 'FIND_IN_SET'],
        ];

        // '>', '<', '>=', '<=', '!=', 'like', '<>'
        if (in_array($mapExp, $expRule[0])) {
            $map = $mapField . '  ' . $mapExp . ' \'' . $mapValue . '\'';
        }
        // 'in', 'not in', 'IN', 'NOT IN'
        elseif (in_array($mapExp, $expRule[1])) {
            if (!$mapValue) {
                $map = $mapField . '  ' . $mapExp . ' (\'\')';
            } else {
                if (!is_array($mapValue) && stripos($mapValue, ',') !== false) {
                    $mapValue = explode(',', $mapValue);
                }
                $mapValue      = is_array($mapValue) ? $mapValue : (array) $mapValue;
                $commonInValue = '';
                foreach ($mapValue as $inValue) {
                    $commonInValue .= '\'' . $inValue . '\',';
                }
                $commonInValue = substr($commonInValue, 0, -1);
                $map           = $mapField . '  ' . $mapExp . ' (' . $commonInValue . ')';
            }
        }
        // 'instr', 'INSTR'
        elseif (in_array($mapExp, $expRule[2])) {
            $map = $mapExp . '(' . $mapField . ',\'' . $mapValue . '\')';
        }
        // 'between', 'BETWEEN'
        elseif (in_array($mapExp, $expRule[3])) {
            $map = $mapField . '  ' . $mapExp . ' \'' . $mapValue[0] . '\' AND \'' . $mapValue[1] . '\'';
        }
        // 'or', 'OR'
        elseif (in_array($mapExp, $expRule[4])) {
            if (count((array) $mapValue) == 2) {
                return $this->parseMap($mapField, $mapValue[0], $mapValue[1], strtoupper($mapExp));
            } else {
                $mapLink = ' ' . strtoupper($mapExp) . ' '; // 连接符
                $map     = $mapField . ' = \'' . $mapValue . '\'';
            }
        }
        // '_string', '_STRING'
        elseif (in_array($mapExp, $expRule[5])) {
            $map = $mapValue;
        }
        // 'find_in_set', 'FIND_IN_SET'
        elseif (in_array($mapExp, $expRule[6])) {
            $map = $mapExp . '(' . $mapValue . ', ' . $mapField . ')';
        } else {
            throw new Exception('SQL WHERE 参数错误 `' . $mapExp . '`');
        }
        return [$map, $mapLink];
    }
处理查询条件