db_qbe.php

来自「phpMyAdmin图形界面化操作,我已经配置好了,只要把解要压缩后的文件放到站」· PHP 代码 · 共 945 行 · 第 1/2 页

PHP
945
字号
        echo "\n";        $or = 'Or' . $y;        if (!isset(${$or})) {            ${$or} = '';        }        if (!empty(${$or}) && isset(${$or}[$x])) {            $stripped_or = ${$or}[$x];        } else {            $stripped_or     = '';        }        ?>    <td align="center">        <textarea cols="20" rows="2" style="width: <?php echo $realwidth; ?>" name="Or<?php echo $w . '[' . $z . ']'; ?>" dir="<?php echo $text_dir; ?>"><?php echo htmlspecialchars($stripped_or); ?></textarea>    </td>        <?php        if (!empty(${$or}) && isset(${$or}[$x])) {            ${'cur' . $or}[$z] = ${$or}[$x];        }        $z++;    } // end for    $w++;    echo "\n";    ?></tr>    <?php    echo "\n";    $odd_row =! $odd_row;} // end for?><!-- Modify columns --><tr class="even noclick">    <th><?php echo $strModify; ?>:</th><?php$z = 0;for ($x = 0; $x < $col; $x++) {    if (!empty($ins_col) && isset($ins_col[$x]) && $ins_col[$x] == 'on') {        $curAndOrCol[$z] = $and_or_col[$y];        if ($and_or_col[$z] == 'or') {            $chk['or']  = ' checked="checked"';            $chk['and'] = '';        } else {            $chk['and'] = ' checked="checked"';            $chk['or']  = '';        }        ?>    <td align="center">        <strong><?php echo $strOr; ?>:</strong>        <input type="radio" name="and_or_col[<?php echo $z; ?>]" value="or"<?php echo $chk['or']; ?> />        &nbsp;&nbsp;<strong><?php echo $strAnd; ?>:</strong>        <input type="radio" name="and_or_col[<?php echo $z; ?>]" value="and"<?php echo $chk['and']; ?> />        <br />        <?php echo $strQBEIns . "\n"; ?>        <input type="checkbox" name="ins_col[<?php echo $z; ?>]" />        &nbsp;&nbsp;<?php echo $strQBEDel . "\n"; ?>        <input type="checkbox" name="del_col[<?php echo $z; ?>]" />    </td>        <?php        $z++;    } // end if    echo "\n";    if (!empty($del_col) && isset($del_col[$x]) && $del_col[$x] == 'on') {        continue;    }    if (isset($and_or_col[$y])) {        $curAndOrCol[$z] = $and_or_col[$y];    }    if (isset($and_or_col[$z]) && $and_or_col[$z] == 'or') {        $chk['or']  = ' checked="checked"';        $chk['and'] = '';    } else {        $chk['and'] = ' checked="checked"';        $chk['or']  = '';    }    ?>    <td align="center">        <strong><?php echo $strOr; ?>:</strong>        <input type="radio" name="and_or_col[<?php echo $z; ?>]" value="or"<?php echo $chk['or']; ?> />        &nbsp;&nbsp;<strong><?php echo $strAnd; ?>:</strong>        <input type="radio" name="and_or_col[<?php echo $z; ?>]" value="and"<?php echo $chk['and']; ?> />        <br />        <?php echo $strQBEIns . "\n"; ?>        <input type="checkbox" name="ins_col[<?php echo $z; ?>]" />        &nbsp;&nbsp;<?php echo $strQBEDel . "\n"; ?>        <input type="checkbox" name="del_col[<?php echo $z; ?>]" />    </td>    <?php    $z++;    echo "\n";} // end for?>    </tr></table><!-- Other controls --><?php$w--;$url_params['db']       = $db;$url_params['col_cnt']  = $z;$url_params['rows']     = $w;echo PMA_generate_common_hidden_inputs($url_params);?></fieldset><fieldset class="tblFooters"><table border="0" cellpadding="2" cellspacing="1"><tr>    <td nowrap="nowrap">        <?php echo $strAddDeleteRow; ?>:        <select size="1" name="add_row" style="vertical-align: middle">            <option value="-3">-3</option>            <option value="-2">-2</option>            <option value="-1">-1</option>            <option value="0" selected="selected">0</option>            <option value="1">1</option>            <option value="2">2</option>            <option value="3">3</option>        </select>    </td>    <td width="10">&nbsp;</td>    <td nowrap="nowrap"><?php echo $strAddDeleteColumn; ?>:        <select size="1" name="add_col" style="vertical-align: middle">            <option value="-3">-3</option>            <option value="-2">-2</option>            <option value="-1">-1</option>            <option value="0" selected="selected">0</option>            <option value="1">1</option>            <option value="2">2</option>            <option value="3">3</option>        </select>    </td>    <td width="10">&nbsp;</td>    <!-- Generates a query -->    <td><input type="submit" name="modify" value="<?php echo $strUpdateQuery; ?>" /></td></tr></table></fieldset><table><tr><td>        <fieldset>            <legend><?php echo $strUseTables; ?></legend><?php$strTableListOptions = '';$numTableListOptions = 0;foreach ($tbl_names as $key => $val) {    $strTableListOptions .= '                        ';    $strTableListOptions .= '<option value="' . htmlspecialchars($key) . '"' . $val . '>'        . str_replace(' ', '&nbsp;', htmlspecialchars($key)) . '</option>' . "\n";    $numTableListOptions++;}?>            <select name="TableList[]" multiple="multiple" id="listTable"                size="<?php echo ($numTableListOptions > 30) ? '15' : '7'; ?>">                <?php echo $strTableListOptions; ?>            </select>        </fieldset>        <fieldset class="tblFooters">            <input type="submit" name="modify" value="<?php echo $strUpdateQuery; ?>" />        </fieldset>    </td>    <td width="20">&nbsp;</td>    <td>        <fieldset>            <legend><?php echo sprintf($strQueryOnDb, PMA_getDbLink($db)); ?>                </legend>            <textarea cols="80" name="sql_query" id="textSqlquery"                rows="<?php echo ($numTableListOptions > 30) ? '15' : '7'; ?>"                dir="<?php echo $text_dir; ?>"><?php// 1. SELECT$last_select = 0;if (!isset($qry_select)) {    $qry_select         = '';}for ($x = 0; $x < $col; $x++) {    if (!empty($curField[$x]) && isset($curShow[$x]) && $curShow[$x] == 'on') {        if ($last_select) {            $qry_select .=  ', ';        }        $qry_select     .= $curField[$x];        $last_select    = 1;    }} // end forif (!empty($qry_select)) {    echo  'SELECT ' . htmlspecialchars($qry_select) . "\n";}// 2. FROM// Create LEFT JOINS out of Relations// Code originally by Mike Beck <mike.beck@ibmiller.de>// If we can use Relations we could make some left joins.// First find out if relations are available in this database.// First we need the really needed Tables - those in TableList might still be// all Tables.if (isset($Field) && count($Field) > 0) {    // Initialize some variables    $tab_all    = array();    $col_all    = array();    $tab_wher   = array();    $tab_know   = array();    $tab_left   = array();    $col_where  = array();    $fromclause = '';    // We only start this if we have fields, otherwise it would be dumb    foreach ($Field as $value) {        $parts             = explode('.', $value);        if (!empty($parts[0]) && !empty($parts[1])) {            $tab_raw       = $parts[0];            $tab           = str_replace('`', '', $tab_raw);            $tab_all[$tab] = $tab;            $col_raw       = $parts[1];            $col_all[]     = $tab . '.' . str_replace('`', '', $col_raw);         }    } // end while    // Check 'where' clauses    if ($cfgRelation['relwork'] && count($tab_all) > 0) {        // Now we need all tables that we have in the where clause        $crit_cnt         = count($criteria);        for ($x = 0; $x < $crit_cnt; $x++) {            $curr_tab     = explode('.', $Field[$x]);            if (!empty($curr_tab[0]) && !empty($curr_tab[1])) {                $tab_raw  = $curr_tab[0];                $tab      = str_replace('`', '', $tab_raw);                $col_raw  = $curr_tab[1];                $col1     = str_replace('`', '', $col_raw);                $col1     = $tab . '.' . $col1;                // Now we know that our array has the same numbers as $criteria                // we can check which of our columns has a where clause                if (!empty($criteria[$x])) {                    if (substr($criteria[$x], 0, 1) == '=' || stristr($criteria[$x], 'is')) {                        $col_where[$col] = $col1;                        $tab_wher[$tab]  = $tab;                    }                } // end if            } // end if        } // end for        // Cleans temp vars w/o further use        unset($tab_raw);        unset($col_raw);        unset($col1);        if (count($tab_wher) == 1) {            // If there is exactly one column that has a decent where-clause            // we will just use this            $master = key($tab_wher);        } else {            // Now let's find out which of the tables has an index            // (When the control user is the same as the normal user            // because he is using one of his databases as pmadb,            // the last db selected is not always the one where we need to work)            PMA_DBI_select_db($db);            foreach ($tab_all as $tab) {                $ind_rs   = PMA_DBI_query('SHOW INDEX FROM ' . PMA_backquote($tab) . ';');                while ($ind = PMA_DBI_fetch_assoc($ind_rs)) {                    $col1 = $tab . '.' . $ind['Column_name'];                    if (isset($col_all[$col1])) {                        if ($ind['non_unique'] == 0) {                            if (isset($col_where[$col1])) {                                $col_unique[$col1] = 'Y';                            } else {                                $col_unique[$col1] = 'N';                            }                        } else {                            if (isset($col_where[$col1])) {                                $col_index[$col1] = 'Y';                            } else {                                $col_index[$col1] = 'N';                            }                        }                    }                } // end while (each col of tab)            } // end while (each tab)            // now we want to find the best.            if (isset($col_unique) && count($col_unique) > 0) {                $col_cand = $col_unique;                $needsort = 1;            } elseif (isset($col_index) && count($col_index) > 0) {                $col_cand = $col_index;                $needsort = 1;            } elseif (isset($col_where) && count($col_where) > 0) {                $col_cand = $tab_wher;                $needsort = 0;            } else {                $col_cand = $tab_all;                $needsort = 0;            }            // If we came up with $col_unique (very good) or $col_index (still            // good) as $col_cand we want to check if we have any 'Y' there            // (that would mean that they were also found in the whereclauses            // which would be great). if yes, we take only those            if ($needsort == 1) {                foreach ($col_cand as $col => $is_where) {                    $tab           = explode('.', $col);                    $tab           = $tab[0];                    if ($is_where == 'Y') {                        $vg[$col]  = $tab;                    } else {                        $sg[$col]  = $tab;                    }                }                if (isset($vg)) {                    $col_cand      = $vg;                    // Candidates restricted in index+where                } else {                    $col_cand      = $sg;                    // None of the candidates where in a where-clause                }            }            // If our array of candidates has more than one member we'll just            // find the smallest table.            // Of course the actual query would be faster if we check for            // the Criteria which gives the smallest result set in its table,            // but it would take too much time to check this            if (count($col_cand) > 1) {                // Of course we only want to check each table once                $checked_tables = $col_cand;                foreach ($col_cand as $tab) {                    if ($checked_tables[$tab] != 1) {                        $tsize[$tab] = PMA_Table::countRecords($db, $tab, true, false);                        $checked_tables[$tab] = 1;                    }                    $csize[$tab] = $tsize[$tab];                }                asort($csize);                reset($csize);                $master = key($csize); // Smallest            } else {                reset($col_cand);                $master = current($col_cand); // Only one single candidate            }        } // end if (exactly one where clause)        $tab_left = $tab_all;        unset($tab_left[$master]);        $tab_know[$master] = $master;        $run   = 0;        $emerg = '';        while (count($tab_left) > 0) {            if ($run % 2 == 0) {                PMA_getRelatives('master');            } else {                PMA_getRelatives('foreign');            }            $run++;            if ($run > 5) {                foreach ($tab_left as $tab) {                    $emerg .= ', ' . PMA_backquote($tab);                    unset($tab_left[$tab]);                }            }        } // end while        $qry_from = PMA_backquote($master) . $emerg . $fromclause;    } // end if ($cfgRelation['relwork'] && count($tab_all) > 0)} // end count($Field) > 0// In case relations are not defined, just generate the FROM clause// from the list of tables, however we don't generate any JOINif (empty($qry_from) && isset($tab_all)) {    $qry_from = implode(', ', $tab_all);}// Now let's see what we gotif (!empty($qry_from)) {    echo 'FROM ' . htmlspecialchars($qry_from) . "\n";}// 3. WHERE$qry_where          = '';$criteria_cnt       = 0;for ($x = 0; $x < $col; $x++) {    if (!empty($curField[$x]) && !empty($curCriteria[$x]) && $x && isset($last_where) && isset($curAndOrCol)) {        $qry_where  .= ' ' . strtoupper($curAndOrCol[$last_where]) . ' ';    }    if (!empty($curField[$x]) && !empty($curCriteria[$x])) {        $qry_where  .= '(' . $curField[$x] . ' ' . $curCriteria[$x] . ')';        $last_where = $x;        $criteria_cnt++;    }} // end forif ($criteria_cnt > 1) {    $qry_where      = '(' . $qry_where . ')';}// OR rows ${'cur' . $or}[$x]if (!isset($curAndOrRow)) {    $curAndOrRow          = array();}for ($y = 0; $y <= $row; $y++) {    $criteria_cnt         = 0;    $qry_orwhere          = '';    $last_orwhere         = '';    for ($x = 0; $x < $col; $x++) {        if (!empty($curField[$x]) && !empty(${'curOr' . $y}[$x]) && $x) {            $qry_orwhere  .= ' ' . strtoupper($curAndOrCol[$last_orwhere]) . ' ';        }        if (!empty($curField[$x]) && !empty(${'curOr' . $y}[$x])) {            $qry_orwhere  .= '(' . $curField[$x]                          .  ' '                          .  ${'curOr' . $y}[$x]                          .  ')';            $last_orwhere = $x;            $criteria_cnt++;        }    } // end for    if ($criteria_cnt > 1) {        $qry_orwhere      = '(' . $qry_orwhere . ')';    }    if (!empty($qry_orwhere)) {        $qry_where .= "\n"                   .  strtoupper(isset($curAndOrRow[$y]) ? $curAndOrRow[$y] . ' ' : '')                   .  $qry_orwhere;    } // end if} // end forif (!empty($qry_where) && $qry_where != '()') {    echo 'WHERE ' . htmlspecialchars($qry_where) . "\n";} // end if// 4. ORDER BY$last_orderby = 0;if (!isset($qry_orderby)) {    $qry_orderby      = '';}for ($x = 0; $x < $col; $x++) {    if ($last_orderby && $x && !empty($curField[$x]) && !empty($curSort[$x])) {        $qry_orderby  .=  ', ';    }    if (!empty($curField[$x]) && !empty($curSort[$x])) {        // if they have chosen all fields using the * selector,        // then sorting is not available        // Robbat2 - Fix for Bug #570698        if (substr($curField[$x], -2) != '.*') {            $qry_orderby  .=  $curField[$x] . ' ' . $curSort[$x];            $last_orderby = 1;        }    }} // end forif (!empty($qry_orderby)) {    echo 'ORDER BY ' . htmlspecialchars($qry_orderby) . "\n";}?>        </textarea>        </fieldset>        <fieldset class="tblFooters">            <input type="submit" name="submit_sql" value="<?php echo $strRunQuery; ?>" />        </fieldset>    </td></tr></table></form><?php/** * Displays the footer */require_once './libraries/footer.inc.php';?>

⌨️ 快捷键说明

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