⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sqlparser.lib.php

📁 phpMyAdmin图形界面化操作,我已经配置好了,只要把解要压缩后的文件放到站点下就可以用了
💻 PHP
📖 第 1 页 / 共 5 页
字号:
                    unset($alias_for_table_ref);                }                $subresult['table_ref'][$current_table_ref]['table_name'] = $chain[$size_chain - 1];                // we assume for now that this is also the true name                $subresult['table_ref'][$current_table_ref]['table_true_name'] = $chain[$size_chain - 1];                $subresult['table_ref'][$current_table_ref]['expr']                     = $subresult['table_ref'][$current_table_ref]['table_name'];                // maybe a db                if ($size_chain > 1) {                    $subresult['table_ref'][$current_table_ref]['db'] = $chain[$size_chain - 2];                    $subresult['table_ref'][$current_table_ref]['expr']                     = $subresult['table_ref'][$current_table_ref]['db']                      . '.' . $subresult['table_ref'][$current_table_ref]['expr'];                } // end if ($size_chain > 1)                // add the table alias into the whole expression                $subresult['table_ref'][$current_table_ref]['expr']                 .= ' ' . $subresult['table_ref'][$current_table_ref]['table_alias'];                unset($chain);                $previous_was_identifier = TRUE;                //continue;            } // end if (save a table ref)            // when we have found all table refs,            // for each table_ref alias, put the true name of the table            // in the corresponding select expressions            if (isset($current_table_ref) && ($seen_end_of_table_ref || $i == $size-1) && $subresult != $subresult_empty) {                for ($tr=0; $tr <= $current_table_ref; $tr++) {                    $alias = $subresult['table_ref'][$tr]['table_alias'];                    $truename = $subresult['table_ref'][$tr]['table_true_name'];                    for ($se=0; $se <= $current_select_expr; $se++) {                        if (isset($alias) && strlen($alias) && $subresult['select_expr'][$se]['table_true_name']                           == $alias) {                            $subresult['select_expr'][$se]['table_true_name']                             = $truename;                        } // end if (found the alias)                    } // end for (select expressions)                } // end for (table refs)            } // end if (set the true names)            // e n d i n g    l o o p  #1            // set the $previous_was_identifier to FALSE if the current            // token is not an identifier            if (($arr[$i]['type'] != 'alpha_identifier')             && ($arr[$i]['type'] != 'quote_double')             && ($arr[$i]['type'] != 'quote_single')             && ($arr[$i]['type'] != 'quote_backtick')) {                $previous_was_identifier = FALSE;            } // end if            // however, if we are on AS, we must keep the $previous_was_identifier            if (($arr[$i]['type'] == 'alpha_reservedWord')             && ($upper_data == 'AS'))  {                $previous_was_identifier = TRUE;            }            if (($arr[$i]['type'] == 'alpha_reservedWord')             && ($upper_data =='ON' || $upper_data =='USING')) {                $save_table_ref = FALSE;            } // end if (data == ON)            if (($arr[$i]['type'] == 'alpha_reservedWord')             && ($upper_data =='JOIN' || $upper_data =='FROM')) {                $save_table_ref = TRUE;            } // end if (data == JOIN)            /**             * no need to check the end of table ref if we already did             *             * @todo maybe add "&& $seen_from"             */            if (!$seen_end_of_table_ref) {                // if this is the last token, it implies that we have                // seen the end of table references                // Check for the end of table references                //                // Note: if we are analyzing a GROUP_CONCAT clause,                // we might find a word that seems to indicate that                // we have found the end of table refs (like ORDER)                // but it's a modifier of the GROUP_CONCAT so                // it's not the real end of table refs                if (($i == $size-1)                 || ($arr[$i]['type'] == 'alpha_reservedWord'                 && !$in_group_concat                 && PMA_STR_binarySearchInArr($upper_data, $words_ending_table_ref, $words_ending_table_ref_cnt))) {                    $seen_end_of_table_ref = TRUE;                    // to be able to save the last table ref, but do not                    // set it true if we found a word like "ON" that has                    // already set it to false                    if (isset($save_table_ref) && $save_table_ref != FALSE) {                        $save_table_ref = TRUE;                    } //end if                } // end if (check for end of table ref)            } //end if (!$seen_end_of_table_ref)            if ($seen_end_of_table_ref) {                $save_table_ref = FALSE;            } // end if        } // end for $i (loop #1)        //DEBUG        /*          if (isset($current_select_expr)) {           for ($trace=0; $trace<=$current_select_expr; $trace++) {               echo "<br />";               reset ($subresult['select_expr'][$trace]);               while (list ($key, $val) = each ($subresult['select_expr'][$trace]))                   echo "sel expr $trace $key => $val<br />\n";               }          }          if (isset($current_table_ref)) {           echo "current_table_ref = " . $current_table_ref . "<br>";           for ($trace=0; $trace<=$current_table_ref; $trace++) {               echo "<br />";               reset ($subresult['table_ref'][$trace]);               while (list ($key, $val) = each ($subresult['table_ref'][$trace]))               echo "table ref $trace $key => $val<br />\n";               }          }        */        // -------------------------------------------------------        // loop #2: - queryflags        //          - querytype (for queries != 'SELECT')        //          - section_before_limit, section_after_limit        //        // we will also need this queryflag in loop 2        // so set it here        if (isset($current_table_ref) && $current_table_ref > -1) {            $subresult['queryflags']['select_from'] = 1;        }        $section_before_limit = '';        $section_after_limit = ''; // truly the section after the limit clause        $seen_reserved_word = FALSE;        $seen_group = FALSE;        $seen_order = FALSE;        $seen_order_by = FALSE;        $in_group_by = FALSE; // true when we are inside the GROUP BY clause        $in_order_by = FALSE; // true when we are inside the ORDER BY clause        $in_having = FALSE; // true when we are inside the HAVING clause        $in_select_expr = FALSE; // true when we are inside the select expr clause        $in_where = FALSE; // true when we are inside the WHERE clause        $seen_limit = FALSE; // true if we have seen a LIMIT clause        $in_limit = FALSE; // true when we are inside the LIMIT clause        $after_limit = FALSE; // true when we are after the LIMIT clause        $in_from = FALSE; // true when we are in the FROM clause        $in_group_concat = FALSE;        $first_reserved_word = '';        $current_identifier = '';        $unsorted_query = $arr['raw']; // in case there is no ORDER BY        for ($i = 0; $i < $size; $i++) {//DEBUG echo "Loop2 <strong>"  . $arr[$i]['data'] . "</strong> (" . $arr[$i]['type'] . ")<br />";            // need_confirm            //            // check for reserved words that will have to generate            // a confirmation request later in sql.php            // the cases are:            //   DROP TABLE            //   DROP DATABASE            //   ALTER TABLE... DROP            //   DELETE FROM...            //            // this code is not used for confirmations coming from functions.js            if ($arr[$i]['type'] == 'alpha_reservedWord') {                $upper_data = strtoupper($arr[$i]['data']);                if (!$seen_reserved_word) {                    $first_reserved_word = $upper_data;                    $subresult['querytype'] = $upper_data;                    $seen_reserved_word = TRUE;                    // if the first reserved word is DROP or DELETE,                    // we know this is a query that needs to be confirmed                    if ($first_reserved_word=='DROP'                     || $first_reserved_word == 'DELETE'                     || $first_reserved_word == 'TRUNCATE') {                        $subresult['queryflags']['need_confirm'] = 1;                    }                    if ($first_reserved_word=='SELECT'){                        $position_of_first_select = $i;                    }                } else {                    if ($upper_data == 'DROP' && $first_reserved_word == 'ALTER') {                        $subresult['queryflags']['need_confirm'] = 1;                    }                }                if ($upper_data == 'LIMIT') {                    $section_before_limit = substr($arr['raw'], 0, $arr[$i]['pos'] - 5);                    $in_limit = TRUE;                    $seen_limit = TRUE;                    $limit_clause = '';                    $in_order_by = FALSE; // @todo maybe others to set FALSE                }                if ($upper_data == 'PROCEDURE') {                    $subresult['queryflags']['procedure'] = 1;                    $in_limit = FALSE;                    $after_limit = TRUE;                }                /**                 * @todo set also to FALSE if we find FOR UPDATE or LOCK IN SHARE MODE                 */                if ($upper_data == 'SELECT') {                    $in_select_expr = TRUE;                    $select_expr_clause = '';                }                if ($upper_data == 'DISTINCT' && !$in_group_concat) {                    $subresult['queryflags']['distinct'] = 1;                }                if ($upper_data == 'UNION') {                    $subresult['queryflags']['union'] = 1;                }                if ($upper_data == 'JOIN') {                    $subresult['queryflags']['join'] = 1;                }                if ($upper_data == 'OFFSET') {                    $subresult['queryflags']['offset'] = 1;                }                // if this is a real SELECT...FROM                if ($upper_data == 'FROM' && isset($subresult['queryflags']['select_from']) && $subresult['queryflags']['select_from'] == 1) {                    $in_from = TRUE;                    $from_clause = '';                    $in_select_expr = FALSE;                }                // (we could have less resetting of variables to FALSE                // if we trust that the query respects the standard                // MySQL order for clauses)                // we use $seen_group and $seen_order because we are looking                // for the BY                if ($upper_data == 'GROUP') {                    $seen_group = TRUE;                    $seen_order = FALSE;                    $in_having = FALSE;                    $in_order_by = FALSE;                    $in_where = FALSE;                    $in_select_expr = FALSE;                    $in_from = FALSE;                }                if ($upper_data == 'ORDER' && !$in_group_concat) {                    $seen_order = TRUE;                    $seen_group = FALSE;                    $in_having = FALSE;                    $in_group_by = FALSE;                    $in_where = FALSE;                    $in_select_expr = FALSE;                    $in_from = FALSE;                }                if ($upper_data == 'HAVING') {                    $in_having = TRUE;                    $having_clause = '';                    $seen_group = FALSE;                    $seen_order = FALSE;                    $in_group_by = FALSE;                    $in_order_by = FALSE;                    $in_where = FALSE;                    $in_select_expr = FALSE;                    $in_from = FALSE;                }                if ($upper_data == 'WHERE') {                    $in_where = TRUE;                    $where_clause = '';                    $where_clause_identifiers = array();                    $seen_group = FALSE;                    $seen_order = FALSE;                    $in_group_by = FALSE;                    $in_order_by = FALSE;                    $in_having = FALSE;                    $in_select_expr = FALSE;                    $in_from = FALSE;                }                if ($upper_data == 'BY') {                    if ($seen_group) {                        $in_group_by = TRUE;                        $group_by_clause = '';                    }                    if ($seen_order) {                        $seen_order_by = TRUE;                        // Here we assume that the ORDER BY keywords took                        // exactly 8 characters.                        // We use PMA_substr() to be charset-safe; otherwise                        // if the table name contains accents, the unsorted                        // query would be missing some characters.                        $unsorted_query = PMA_substr($arr['raw'], 0, $arr[$i]['pos'] - 8);                        $in_order_by = TRUE;                        $order_by_clause = '';                    }                }                // if we find one of the words that could end the clause                if (PMA_STR_binarySearchInArr($upper_data, $words_ending_clauses, $words_ending_clauses_cnt)) {                    $in_group_by = FALSE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -