Beispiel #1
0
require 'libraries/db_common.inc.php';
/**
 * init
 */
// If config variable $GLOBALS['cfg']['Usedbsearch'] is on false : exit.
if (!$GLOBALS['cfg']['UseDbSearch']) {
    PMA_mysqlDie(__('Access denied'), '', false, $err_url);
}
// end if
$url_query .= '&goto=db_search.php';
$url_params['goto'] = 'db_search.php';
/**
 * @global array list of tables from the current database
 * but do not clash with $tables coming from db_info.inc.php
 */
$tables_names_only = PMA_DBI_get_tables($GLOBALS['db']);
$search_options = array('1' => __('at least one of the words'), '2' => __('all words'), '3' => __('the exact phrase'), '4' => __('as regular expression'));
if (empty($_REQUEST['search_option']) || !is_string($_REQUEST['search_option']) || !array_key_exists($_REQUEST['search_option'], $search_options)) {
    $search_option = 1;
    unset($_REQUEST['submit_search']);
} else {
    $search_option = (int) $_REQUEST['search_option'];
    $option_str = $search_options[$_REQUEST['search_option']];
}
if (empty($_REQUEST['search_str']) || !is_string($_REQUEST['search_str'])) {
    unset($_REQUEST['submit_search']);
    $searched = '';
} else {
    $searched = htmlspecialchars($_REQUEST['search_str']);
    // For "as regular expression" (search option 4), we should not treat
    // this as an expression that contains a LIKE (second parameter of
             $sort_order = 'DESC';
         }
     }
 }
 if (!empty($tbl_group) && !$cfg['ShowTooltipAliasTB']) {
     // only tables for selected group
     $tables = PMA_DBI_get_tables_full($db, $tbl_group, true, null, 0, false, $sort, $sort_order);
 } elseif (!empty($tbl_group) && $cfg['ShowTooltipAliasTB']) {
     // only tables for selected group,
     // but grouping is done on comment ...
     $tables = PMA_DBI_get_tables_full($db, $tbl_group, 'comment', null, 0, false, $sort, $sort_order);
 } else {
     // all tables in db
     // - get the total number of tables
     //  (needed for proper working of the MaxTableList feature)
     $tables = PMA_DBI_get_tables($db);
     $total_num_tables = count($tables);
     if (isset($sub_part) && $sub_part == '_export') {
         // (don't fetch only a subset if we are coming from db_export.php,
         // because I think it's too risky to display only a subset of the
         // table names when exporting a db)
         /**
          *
          * @todo Page selector for table names?
          */
         $tables = PMA_DBI_get_tables_full($db, false, false, null, 0, false, $sort, $sort_order);
     } else {
         // fetch the details for a possible limited subset
         $tables = PMA_DBI_get_tables_full($db, false, false, null, $pos, true, $sort, $sort_order);
     }
 }
/**
 * returns detailed array with all columns for given table in database,
 * or all tables/databases
 *
 * @param   string  $database   name of database
 * @param   string  $table      name of table to retrieve columns from
 * @param   string  $column     name of specific column
 * @param   mixed   $link       mysql link resource
 */
function PMA_DBI_get_columns_full($database = null, $table = null, $column = null, $link = null)
{
    $columns = array();
    if (!$GLOBALS['cfg']['Server']['DisableIS']) {
        $sql_wheres = array();
        $array_keys = array();
        // get columns information from information_schema
        if (null !== $database) {
            $sql_wheres[] = '`TABLE_SCHEMA` = \'' . addslashes($database) . '\' ';
        } else {
            $array_keys[] = 'TABLE_SCHEMA';
        }
        if (null !== $table) {
            $sql_wheres[] = '`TABLE_NAME` = \'' . addslashes($table) . '\' ';
        } else {
            $array_keys[] = 'TABLE_NAME';
        }
        if (null !== $column) {
            $sql_wheres[] = '`COLUMN_NAME` = \'' . addslashes($column) . '\' ';
        } else {
            $array_keys[] = 'COLUMN_NAME';
        }
        // for PMA bc:
        // `[SCHEMA_FIELD_NAME]` AS `[SHOW_FULL_COLUMNS_FIELD_NAME]`
        $sql = '
             SELECT *,
                    `COLUMN_NAME`       AS `Field`,
                    `COLUMN_TYPE`       AS `Type`,
                    `COLLATION_NAME`    AS `Collation`,
                    `IS_NULLABLE`       AS `Null`,
                    `COLUMN_KEY`        AS `Key`,
                    `COLUMN_DEFAULT`    AS `Default`,
                    `EXTRA`             AS `Extra`,
                    `PRIVILEGES`        AS `Privileges`,
                    `COLUMN_COMMENT`    AS `Comment`
               FROM `information_schema`.`COLUMNS`';
        if (count($sql_wheres)) {
            $sql .= "\n" . ' WHERE ' . implode(' AND ', $sql_wheres);
        }
        $columns = PMA_DBI_fetch_result($sql, $array_keys, null, $link);
        unset($sql_wheres, $sql);
    } else {
        if (null === $database) {
            foreach ($GLOBALS['pma']->databases as $database) {
                $columns[$database] = PMA_DBI_get_columns_full($database, null, null, $link);
            }
            return $columns;
        } elseif (null === $table) {
            $tables = PMA_DBI_get_tables($database);
            foreach ($tables as $table) {
                $columns[$table] = PMA_DBI_get_columns_full($database, $table, null, $link);
            }
            return $columns;
        }
        $sql = 'SHOW FULL COLUMNS FROM ' . PMA_backquote($database) . '.' . PMA_backquote($table);
        if (null !== $column) {
            $sql .= " LIKE '" . $column . "'";
        }
        $columns = PMA_DBI_fetch_result($sql, 'Field', null, $link);
        $ordinal_position = 1;
        foreach ($columns as $column_name => $each_column) {
            // MySQL forward compatibility
            // so pma could use this array as if every server is of version >5.0
            $columns[$column_name]['COLUMN_NAME'] =& $columns[$column_name]['Field'];
            $columns[$column_name]['COLUMN_TYPE'] =& $columns[$column_name]['Type'];
            $columns[$column_name]['COLLATION_NAME'] =& $columns[$column_name]['Collation'];
            $columns[$column_name]['IS_NULLABLE'] =& $columns[$column_name]['Null'];
            $columns[$column_name]['COLUMN_KEY'] =& $columns[$column_name]['Key'];
            $columns[$column_name]['COLUMN_DEFAULT'] =& $columns[$column_name]['Default'];
            $columns[$column_name]['EXTRA'] =& $columns[$column_name]['Extra'];
            $columns[$column_name]['PRIVILEGES'] =& $columns[$column_name]['Privileges'];
            $columns[$column_name]['COLUMN_COMMENT'] =& $columns[$column_name]['Comment'];
            $columns[$column_name]['TABLE_CATALOG'] = null;
            $columns[$column_name]['TABLE_SCHEMA'] = $database;
            $columns[$column_name]['TABLE_NAME'] = $table;
            $columns[$column_name]['ORDINAL_POSITION'] = $ordinal_position;
            $columns[$column_name]['DATA_TYPE'] = substr($columns[$column_name]['COLUMN_TYPE'], 0, strpos($columns[$column_name]['COLUMN_TYPE'], '('));
            /**
             * @todo guess CHARACTER_MAXIMUM_LENGTH from COLUMN_TYPE
             */
            $columns[$column_name]['CHARACTER_MAXIMUM_LENGTH'] = null;
            /**
             * @todo guess CHARACTER_OCTET_LENGTH from CHARACTER_MAXIMUM_LENGTH
             */
            $columns[$column_name]['CHARACTER_OCTET_LENGTH'] = null;
            $columns[$column_name]['NUMERIC_PRECISION'] = null;
            $columns[$column_name]['NUMERIC_SCALE'] = null;
            $columns[$column_name]['CHARACTER_SET_NAME'] = substr($columns[$column_name]['COLLATION_NAME'], 0, strpos($columns[$column_name]['COLLATION_NAME'], '_'));
            $ordinal_position++;
        }
        if (null !== $column) {
            reset($columns);
            $columns = current($columns);
        }
    }
    return $columns;
}
/**
 * This function provides synchronization of structure and data between two mysql servers. 
 * TODO: improve code sharing between the function and synchronization
 *
 * @param String $db - name of database, which should be synchronized
 * @param mixed $src_link - link of source server, note: if the server is current PMA server, use null
 * @param mixed $trg_link - link of target server, note: if the server is current PMA server, use null
 * @param boolean $data - if true, then data will be copied as well
 */
function PMA_replication_synchronize_db($db, $src_link, $trg_link, $data = true)
{
    $src_db = $trg_db = $db;
    $src_connection = PMA_DBI_select_db($src_db, $src_link);
    $trg_connection = PMA_DBI_select_db($trg_db, $trg_link);
    $src_tables = PMA_DBI_get_tables($src_db, $src_link);
    $source_tables_num = sizeof($src_tables);
    $trg_tables = PMA_DBI_get_tables($trg_db, $trg_link);
    $target_tables_num = sizeof($trg_tables);
    /**
     * initializing arrays to save table names 
     */
    $unmatched_num_src = 0;
    $source_tables_uncommon = array();
    $unmatched_num_trg = 0;
    $target_tables_uncommon = array();
    $matching_tables = array();
    $matching_tables_num = 0;
    /**
     * Criterion for matching tables is just their names.
     * Finding the uncommon tables for the source database
     * BY comparing the matching tables with all the tables in the source database
     */
    PMA_getMatchingTables($trg_tables, $src_tables, $matching_tables, $source_tables_uncommon);
    /**
     * Finding the uncommon tables for the target database
     * BY comparing the matching tables with all the tables in the target database
     */
    PMA_getNonMatchingTargetTables($trg_tables, $matching_tables, $target_tables_uncommon);
    /**
     * 
     * Comparing Data In the Matching Tables 
     * It is assumed that the matching tables are structurally 
     * and typely exactly the same  
     */
    $fields_num = array();
    $matching_tables_fields = array();
    $matching_tables_keys = array();
    $insert_array = array(array(array()));
    $update_array = array(array(array()));
    $delete_array = array();
    $row_count = array();
    $uncommon_tables_fields = array();
    $matching_tables_num = sizeof($matching_tables);
    for ($i = 0; $i < sizeof($matching_tables); $i++) {
        PMA_dataDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $matching_tables_fields, $update_array, $insert_array, $delete_array, $fields_num, $i, $matching_tables_keys);
    }
    for ($j = 0; $j < sizeof($source_tables_uncommon); $j++) {
        PMA_dataDiffInUncommonTables($source_tables_uncommon, $src_db, $src_link, $j, $row_count);
    }
    /**
     * INTEGRATION OF STRUCTURE DIFFERENCE CODE
     *
     */
    $source_columns = array();
    $target_columns = array();
    $alter_str_array = array(array());
    $add_column_array = array(array());
    $uncommon_columns = array();
    $target_tables_keys = array();
    $source_indexes = array();
    $target_indexes = array();
    $add_indexes_array = array();
    $remove_indexes_array = array();
    $criteria = array('Field', 'Type', 'Null', 'Collation', 'Key', 'Default', 'Comment');
    for ($counter = 0; $counter < $matching_tables_num; $counter++) {
        PMA_structureDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $source_columns, $target_columns, $alter_str_array, $add_column_array, $uncommon_columns, $criteria, $target_tables_keys, $counter);
        PMA_indexesDiffInTables($src_db, $trg_db, $src_link, $trg_link, $matching_tables, $source_indexes, $target_indexes, $add_indexes_array, $alter_indexes_array, $remove_indexes_array, $counter);
    }
    $matching_table_data_diff = array();
    $matching_table_structure_diff = array();
    $uncommon_table_structure_diff = array();
    $uncommon_table_data_diff = array();
    $uncommon_tables = $source_tables_uncommon;
    /**
     * Generating Create Table query for all the non-matching tables present in Source but not in Target and populating tables.  
     */
    for ($q = 0; $q < sizeof($source_tables_uncommon); $q++) {
        if (isset($uncommon_tables[$q])) {
            PMA_createTargetTables($src_db, $trg_db, $src_link, $trg_link, $source_tables_uncommon, $q, $uncommon_tables_fields, false);
        }
        if (isset($row_count[$q]) && $data) {
            PMA_populateTargetTables($src_db, $trg_db, $src_link, $trg_link, $source_tables_uncommon, $q, $uncommon_tables_fields, false);
        }
    }
}
Beispiel #5
0
 // Gets the number of tables if a dump of a database has been required
 if ($export_type == 'server') {
     if (isset($db_select)) {
         $tmp_select = implode($db_select, '|');
         $tmp_select = '|' . $tmp_select . '|';
     }
     // Walk over databases
     foreach ($GLOBALS['pma']->databases as $current_db) {
         if (isset($tmp_select) && strpos(' ' . $tmp_select, '|' . $current_db . '|') || !isset($tmp_select)) {
             if (!PMA_exportDBHeader($current_db)) {
                 break 2;
             }
             if (!PMA_exportDBCreate($current_db)) {
                 break 2;
             }
             $tables = PMA_DBI_get_tables($current_db);
             $views = array();
             foreach ($tables as $table) {
                 // if this is a view, collect it for later; views must be exported
                 // after the tables
                 $is_view = PMA_Table::isView($current_db, $table);
                 if ($is_view) {
                     $views[] = $table;
                 }
                 if (isset($GLOBALS[$what . '_structure'])) {
                     // for a view, export a stand-in definition of the table
                     // to resolve view dependencies
                     if (!PMA_exportStructure($current_db, $table, $crlf, $err_url, $do_relation, $do_comments, $do_mime, $do_dates, $is_view ? 'stand_in' : 'create_table', $export_type)) {
                         break 3;
                     }
                 }
/**
 * returns detailed array with all columns for given table in database,
 * or all tables/databases
 *
 * @param string $database name of database
 * @param string $table    name of table to retrieve columns from
 * @param string $column   name of specific column
 * @param mixed  $link     mysql link resource
 *
 * @return array
 */
function PMA_DBI_get_columns_full($database = null, $table = null, $column = null, $link = null)
{
    $common_functions = PMA_CommonFunctions::getInstance();
    $columns = array();
    if (!$GLOBALS['cfg']['Server']['DisableIS']) {
        $sql_wheres = array();
        $array_keys = array();
        // get columns information from information_schema
        if (null !== $database) {
            $sql_wheres[] = '`TABLE_SCHEMA` = \'' . $common_functions->sqlAddSlashes($database) . '\' ';
        } else {
            $array_keys[] = 'TABLE_SCHEMA';
        }
        if (null !== $table) {
            $sql_wheres[] = '`TABLE_NAME` = \'' . $common_functions->sqlAddSlashes($table) . '\' ';
        } else {
            $array_keys[] = 'TABLE_NAME';
        }
        if (null !== $column) {
            $sql_wheres[] = '`COLUMN_NAME` = \'' . $common_functions->sqlAddSlashes($column) . '\' ';
        } else {
            $array_keys[] = 'COLUMN_NAME';
        }
        // for PMA bc:
        // `[SCHEMA_FIELD_NAME]` AS `[SHOW_FULL_COLUMNS_FIELD_NAME]`
        if (PMA_DRIZZLE) {
            $sql = "SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME,\n                column_name        AS `Field`,\n                (CASE\n                    WHEN character_maximum_length > 0\n                        THEN concat(lower(data_type), '(', character_maximum_length, ')')\n                    WHEN numeric_precision > 0 OR numeric_scale > 0\n                        THEN concat(lower(data_type), '(', numeric_precision, ',', numeric_scale, ')')\n                    WHEN enum_values IS NOT NULL\n                        THEN concat(lower(data_type), '(', enum_values, ')')\n                    ELSE lower(data_type) END)\n                                   AS `Type`,\n                collation_name     AS `Collation`,\n                (CASE is_nullable\n                    WHEN 1 THEN 'YES'\n                    ELSE 'NO' END) AS `Null`,\n                (CASE\n                    WHEN is_used_in_primary THEN 'PRI'\n                    ELSE '' END)   AS `Key`,\n                column_default     AS `Default`,\n                (CASE\n                    WHEN is_auto_increment THEN 'auto_increment'\n                    WHEN column_default_update THEN 'on update ' || column_default_update\n                    ELSE '' END)   AS `Extra`,\n                NULL               AS `Privileges`,\n                column_comment     AS `Comment`\n            FROM data_dictionary.columns";
        } else {
            $sql = '
                 SELECT *,
                        `COLUMN_NAME`       AS `Field`,
                        `COLUMN_TYPE`       AS `Type`,
                        `COLLATION_NAME`    AS `Collation`,
                        `IS_NULLABLE`       AS `Null`,
                        `COLUMN_KEY`        AS `Key`,
                        `COLUMN_DEFAULT`    AS `Default`,
                        `EXTRA`             AS `Extra`,
                        `PRIVILEGES`        AS `Privileges`,
                        `COLUMN_COMMENT`    AS `Comment`
                   FROM `information_schema`.`COLUMNS`';
        }
        if (count($sql_wheres)) {
            $sql .= "\n" . ' WHERE ' . implode(' AND ', $sql_wheres);
        }
        $columns = PMA_DBI_fetch_result($sql, $array_keys, null, $link);
        unset($sql_wheres, $sql);
    } else {
        if (null === $database) {
            foreach ($GLOBALS['pma']->databases as $database) {
                $columns[$database] = PMA_DBI_get_columns_full($database, null, null, $link);
            }
            return $columns;
        } elseif (null === $table) {
            $tables = PMA_DBI_get_tables($database);
            foreach ($tables as $table) {
                $columns[$table] = PMA_DBI_get_columns_full($database, $table, null, $link);
            }
            return $columns;
        }
        $sql = 'SHOW FULL COLUMNS FROM ' . $common_functions->backquote($database) . '.' . $common_functions->backquote($table);
        if (null !== $column) {
            $sql .= " LIKE '" . $common_functions->sqlAddSlashes($column, true) . "'";
        }
        $columns = PMA_DBI_fetch_result($sql, 'Field', null, $link);
    }
    $ordinal_position = 1;
    foreach ($columns as $column_name => $each_column) {
        // MySQL forward compatibility
        // so pma could use this array as if every server is of version >5.0
        // todo : remove and check the rest of the code for usage,
        // MySQL 5.0 or higher is required for current PMA version
        $columns[$column_name]['COLUMN_NAME'] =& $columns[$column_name]['Field'];
        $columns[$column_name]['COLUMN_TYPE'] =& $columns[$column_name]['Type'];
        $columns[$column_name]['COLLATION_NAME'] =& $columns[$column_name]['Collation'];
        $columns[$column_name]['IS_NULLABLE'] =& $columns[$column_name]['Null'];
        $columns[$column_name]['COLUMN_KEY'] =& $columns[$column_name]['Key'];
        $columns[$column_name]['COLUMN_DEFAULT'] =& $columns[$column_name]['Default'];
        $columns[$column_name]['EXTRA'] =& $columns[$column_name]['Extra'];
        $columns[$column_name]['PRIVILEGES'] =& $columns[$column_name]['Privileges'];
        $columns[$column_name]['COLUMN_COMMENT'] =& $columns[$column_name]['Comment'];
        $columns[$column_name]['TABLE_CATALOG'] = null;
        $columns[$column_name]['TABLE_SCHEMA'] = $database;
        $columns[$column_name]['TABLE_NAME'] = $table;
        $columns[$column_name]['ORDINAL_POSITION'] = $ordinal_position;
        $columns[$column_name]['DATA_TYPE'] = substr($columns[$column_name]['COLUMN_TYPE'], 0, strpos($columns[$column_name]['COLUMN_TYPE'], '('));
        /**
         * @todo guess CHARACTER_MAXIMUM_LENGTH from COLUMN_TYPE
         */
        $columns[$column_name]['CHARACTER_MAXIMUM_LENGTH'] = null;
        /**
         * @todo guess CHARACTER_OCTET_LENGTH from CHARACTER_MAXIMUM_LENGTH
         */
        $columns[$column_name]['CHARACTER_OCTET_LENGTH'] = null;
        $columns[$column_name]['NUMERIC_PRECISION'] = null;
        $columns[$column_name]['NUMERIC_SCALE'] = null;
        $columns[$column_name]['CHARACTER_SET_NAME'] = substr($columns[$column_name]['COLLATION_NAME'], 0, strpos($columns[$column_name]['COLLATION_NAME'], '_'));
        $ordinal_position++;
    }
    if (null !== $column) {
        reset($columns);
        $columns = current($columns);
    }
    return $columns;
}
Beispiel #7
0
 /**
  * Returns the db tabs as an array
  *
  * @return array Data for generating db tabs
  */
 private function _getDbTabs()
 {
     $db_is_information_schema = PMA_is_system_schema($this->_db);
     $num_tables = count(PMA_DBI_get_tables($this->_db));
     $is_superuser = PMA_isSuperuser();
     /**
      * Gets the relation settings
      */
     $cfgRelation = PMA_getRelationsParam();
     $tabs = array();
     $tabs['structure']['link'] = 'db_structure.php';
     $tabs['structure']['text'] = __('Structure');
     $tabs['structure']['icon'] = 'b_props.png';
     $tabs['sql']['link'] = 'db_sql.php';
     $tabs['sql']['args']['db_query_force'] = 1;
     $tabs['sql']['text'] = __('SQL');
     $tabs['sql']['icon'] = 'b_sql.png';
     $tabs['search']['text'] = __('Search');
     $tabs['search']['icon'] = 'b_search.png';
     $tabs['search']['link'] = 'db_search.php';
     if ($num_tables == 0) {
         $tabs['search']['warning'] = __('Database seems to be empty!');
     }
     $tabs['qbe']['text'] = __('Query');
     $tabs['qbe']['icon'] = 's_db.png';
     $tabs['qbe']['link'] = 'db_qbe.php';
     if ($num_tables == 0) {
         $tabs['qbe']['warning'] = __('Database seems to be empty!');
     }
     $tabs['export']['text'] = __('Export');
     $tabs['export']['icon'] = 'b_export.png';
     $tabs['export']['link'] = 'db_export.php';
     if ($num_tables == 0) {
         $tabs['export']['warning'] = __('Database seems to be empty!');
     }
     if (!$db_is_information_schema) {
         $tabs['import']['link'] = 'db_import.php';
         $tabs['import']['text'] = __('Import');
         $tabs['import']['icon'] = 'b_import.png';
         $tabs['operation']['link'] = 'db_operations.php';
         $tabs['operation']['text'] = __('Operations');
         $tabs['operation']['icon'] = 'b_tblops.png';
         if ($is_superuser && !PMA_DRIZZLE) {
             $tabs['privileges']['link'] = 'server_privileges.php';
             $tabs['privileges']['args']['checkprivs'] = $this->_db;
             // stay on database view
             $tabs['privileges']['args']['viewing_mode'] = 'db';
             $tabs['privileges']['text'] = __('Privileges');
             $tabs['privileges']['icon'] = 's_rights.png';
         }
         if (!PMA_DRIZZLE) {
             $tabs['routines']['link'] = 'db_routines.php';
             $tabs['routines']['text'] = __('Routines');
             $tabs['routines']['icon'] = 'b_routines.png';
         }
         if (PMA_MYSQL_INT_VERSION >= 50106 && !PMA_DRIZZLE && PMA_Util::currentUserHasPrivilege('EVENT', $this->_db)) {
             $tabs['events']['link'] = 'db_events.php';
             $tabs['events']['text'] = __('Events');
             $tabs['events']['icon'] = 'b_events.png';
         }
         if (!PMA_DRIZZLE && PMA_Util::currentUserHasPrivilege('TRIGGER', $this->_db)) {
             $tabs['triggers']['link'] = 'db_triggers.php';
             $tabs['triggers']['text'] = __('Triggers');
             $tabs['triggers']['icon'] = 'b_triggers.png';
         }
     }
     if (PMA_Tracker::isActive()) {
         $tabs['tracking']['text'] = __('Tracking');
         $tabs['tracking']['icon'] = 'eye.png';
         $tabs['tracking']['link'] = 'db_tracking.php';
     }
     if (!$db_is_information_schema && $cfgRelation['designerwork']) {
         $tabs['designer']['text'] = __('Designer');
         $tabs['designer']['icon'] = 'b_relations.png';
         $tabs['designer']['link'] = 'pmd_general.php';
     }
     return $tabs;
 }
/**
 * Composes the query necessary to create a trigger from an HTTP request.
 *
 * @return string  The CREATE TRIGGER query.
 */
function PMA_TRI_getQueryFromRequest()
{
    global $_REQUEST, $db, $errors, $action_timings, $event_manipulations;
    $query = 'CREATE ';
    if (!empty($_REQUEST['item_definer'])) {
        if (strpos($_REQUEST['item_definer'], '@') !== false) {
            $arr = explode('@', $_REQUEST['item_definer']);
            $query .= 'DEFINER=' . PMA_Util::backquote($arr[0]);
            $query .= '@' . PMA_Util::backquote($arr[1]) . ' ';
        } else {
            $errors[] = __('The definer must be in the "username@hostname" format');
        }
    }
    $query .= 'TRIGGER ';
    if (!empty($_REQUEST['item_name'])) {
        $query .= PMA_Util::backquote($_REQUEST['item_name']) . ' ';
    } else {
        $errors[] = __('You must provide a trigger name');
    }
    if (!empty($_REQUEST['item_timing']) && in_array($_REQUEST['item_timing'], $action_timings)) {
        $query .= $_REQUEST['item_timing'] . ' ';
    } else {
        $errors[] = __('You must provide a valid timing for the trigger');
    }
    if (!empty($_REQUEST['item_event']) && in_array($_REQUEST['item_event'], $event_manipulations)) {
        $query .= $_REQUEST['item_event'] . ' ';
    } else {
        $errors[] = __('You must provide a valid event for the trigger');
    }
    $query .= 'ON ';
    if (!empty($_REQUEST['item_table']) && in_array($_REQUEST['item_table'], PMA_DBI_get_tables($db))) {
        $query .= PMA_Util::backquote($_REQUEST['item_table']);
    } else {
        $errors[] = __('You must provide a valid table name');
    }
    $query .= ' FOR EACH ROW ';
    if (!empty($_REQUEST['item_definition'])) {
        $query .= $_REQUEST['item_definition'];
    } else {
        $errors[] = __('You must provide a trigger definition.');
    }
    return $query;
}
Beispiel #9
0
if (!defined('PHPMYADMIN')) {
    exit;
}
/**
 * Include all other files that are common
 * to routines, triggers and events.
 */
require_once './libraries/rte/rte_words.lib.php';
require_once './libraries/rte/rte_export.lib.php';
require_once './libraries/rte/rte_list.lib.php';
require_once './libraries/rte/rte_footer.lib.php';
if ($GLOBALS['is_ajax_request'] != true) {
    /**
     * Displays the header and tabs
     */
    if (!empty($table) && in_array($table, PMA_DBI_get_tables($db))) {
        include_once './libraries/tbl_common.php';
        include_once './libraries/tbl_links.inc.php';
    } else {
        $table = '';
        include_once './libraries/db_common.inc.php';
        include_once './libraries/db_info.inc.php';
    }
} else {
    /**
     * Since we did not include some libraries, we need
     * to manually select the required database and
     * create the missing $url_query variable
     */
    if (strlen($db)) {
        PMA_DBI_select_db($db);
         echo sprintf($GLOBALS['strDatabaseNotExisting'], htmlspecialchars($src_db));
     }
     if ($trg_db_selected != 1) {
         echo sprintf($GLOBALS['strDatabaseNotExisting'], htmlspecialchars($trg_db));
     }
     echo '</div>';
     unset($_REQUEST['submit_connect']);
 } else {
     if ($src_db_selected == 1 && $trg_db_selected == 1) {
         /**
          * Using PMA_DBI_get_tables() to get all the tables 
          * from target and source databases. 
          */
         $src_tables = PMA_DBI_get_tables($src_db, $src_link);
         $source_tables_num = sizeof($src_tables);
         $trg_tables = PMA_DBI_get_tables($trg_db, $trg_link);
         $target_tables_num = sizeof($trg_tables);
         /**
          * initializing arrays to save matching and non-matching 
          * table names from target and source databases.  
          */
         $unmatched_num_src = 0;
         $source_tables_uncommon = array();
         $unmatched_num_trg = 0;
         $target_tables_uncommon = array();
         $matching_tables = array();
         $matching_tables_num = 0;
         /**
          * Using PMA_getMatchingTables to find which of the tables' names match
          * in target and source database. 
          */
Beispiel #11
0
/**
 * Generate table html when SQL statement have multiple queries
 * which return displayable results
 *
 * @param PMA_DisplayResults $displayResultsObject object
 * @param string             $db                   database name
 * @param array              $sql_data             information about SQL statement
 * @param string             $goto                 URL to go back in case of errors
 * @param string             $pmaThemeImage        path for theme images directory
 * @param string             $text_dir             text direction
 * @param string             $printview            whether printview is enabled
 * @param string             $url_query            URL query
 * @param array              $disp_mode            the display mode
 * @param string             $sql_limit_to_append  limit clause
 * @param bool               $editable             whether result set is editable
 *
 * @return string   $table_html   html content
 */
function getTableHtmlForMultipleQueries($displayResultsObject, $db, $sql_data, $goto, $pmaThemeImage, $text_dir, $printview, $url_query, $disp_mode, $sql_limit_to_append, $editable)
{
    $table_html = '';
    $tables_array = PMA_DBI_get_tables($db);
    $databases_array = PMA_DBI_get_databases_full();
    $multi_sql = implode(";", $sql_data['valid_sql']);
    $querytime_before = array_sum(explode(' ', microtime()));
    // Assignment for variable is not needed since the results are
    // looiping using the connection
    @PMA_DBI_try_multi_query($multi_sql);
    $querytime_after = array_sum(explode(' ', microtime()));
    $querytime = $querytime_after - $querytime_before;
    $sql_no = 0;
    do {
        $analyzed_sql = array();
        $is_affected = false;
        $result = PMA_DBI_store_result();
        $fields_meta = $result !== false ? PMA_DBI_get_fields_meta($result) : array();
        $fields_cnt = count($fields_meta);
        // Initialize needed params related to each query in multiquery statement
        if (isset($sql_data['valid_sql'][$sql_no])) {
            // 'Use' query can change the database
            if (stripos($sql_data['valid_sql'][$sql_no], "use ")) {
                $db = PMA_getNewDatabase($sql_data['valid_sql'][$sql_no], $databases_array);
            }
            $parsed_sql = PMA_SQP_parse($sql_data['valid_sql'][$sql_no]);
            $table = PMA_getTableNameBySQL($sql_data['valid_sql'][$sql_no], $tables_array);
            $analyzed_sql = PMA_SQP_analyze($parsed_sql);
            $is_select = isset($analyzed_sql[0]['queryflags']['select_from']);
            $unlim_num_rows = PMA_Table::countRecords($db, $table, true);
            $showtable = PMA_Table::sGetStatusInfo($db, $table, null, true);
            $url_query = PMA_generate_common_url($db, $table);
            list($is_group, $is_func, $is_count, $is_export, $is_analyse, $is_explain, $is_delete, $is_affected, $is_insert, $is_replace, $is_show, $is_maint) = PMA_getDisplayPropertyParams($sql_data['valid_sql'][$sql_no], $is_select);
            // Handle remembered sorting order, only for single table query
            if ($GLOBALS['cfg']['RememberSorting'] && !($is_count || $is_export || $is_func || $is_analyse) && isset($analyzed_sql[0]['select_expr']) && count($analyzed_sql[0]['select_expr']) == 0 && isset($analyzed_sql[0]['queryflags']['select_from']) && count($analyzed_sql[0]['table_ref']) == 1) {
                PMA_handleSortOrder($db, $table, $analyzed_sql, $sql_data['valid_sql'][$sql_no]);
            }
            // Do append a "LIMIT" clause?
            if ($_SESSION['tmp_user_values']['max_rows'] != 'all' && !($is_count || $is_export || $is_func || $is_analyse) && isset($analyzed_sql[0]['queryflags']['select_from']) && !isset($analyzed_sql[0]['queryflags']['offset']) && empty($analyzed_sql[0]['limit_clause'])) {
                $sql_limit_to_append = ' LIMIT ' . $_SESSION['tmp_user_values']['pos'] . ', ' . $_SESSION['tmp_user_values']['max_rows'] . " ";
                $sql_data['valid_sql'][$sql_no] = PMA_getSqlWithLimitClause($sql_data['valid_sql'][$sql_no], $analyzed_sql, $sql_limit_to_append);
            }
            // Set the needed properties related to executing sql query
            $displayResultsObject->__set('db', $db);
            $displayResultsObject->__set('table', $table);
            $displayResultsObject->__set('goto', $goto);
        }
        if (!$is_affected) {
            $num_rows = $result ? @PMA_DBI_num_rows($result) : 0;
        } elseif (!isset($num_rows)) {
            $num_rows = @PMA_DBI_affected_rows();
        }
        if (isset($sql_data['valid_sql'][$sql_no])) {
            $displayResultsObject->__set('sql_query', $sql_data['valid_sql'][$sql_no]);
            $displayResultsObject->setProperties($unlim_num_rows, $fields_meta, $is_count, $is_export, $is_func, $is_analyse, $num_rows, $fields_cnt, $querytime, $pmaThemeImage, $text_dir, $is_maint, $is_explain, $is_show, $showtable, $printview, $url_query, $editable);
        }
        if ($num_rows == 0) {
            continue;
        }
        // With multiple results, operations are limied
        $disp_mode = 'nnnn000000';
        $is_limited_display = true;
        // Collect the tables
        $table_html .= $displayResultsObject->getTable($result, $disp_mode, $analyzed_sql, $is_limited_display);
        // Free the result to save the memory
        PMA_DBI_free_result($result);
        $sql_no++;
    } while (PMA_DBI_more_results() && PMA_DBI_next_result());
    return $table_html;
}
Beispiel #12
0
 /**
  * Sets search parameters
  *
  * @return void
  */
 private function _setSearchParams()
 {
     $this->_tables_names_only = PMA_DBI_get_tables($this->_db);
     $this->_searchTypes = array('1' => __('at least one of the words'), '2' => __('all words'), '3' => __('the exact phrase'), '4' => __('as regular expression'));
     if (empty($_REQUEST['criteriaSearchType']) || !is_string($_REQUEST['criteriaSearchType']) || !array_key_exists($_REQUEST['criteriaSearchType'], $this->_searchTypes)) {
         $this->_criteriaSearchType = 1;
         unset($_REQUEST['submit_search']);
     } else {
         $this->_criteriaSearchType = (int) $_REQUEST['criteriaSearchType'];
         $this->_searchTypeDescription = $this->_searchTypes[$_REQUEST['criteriaSearchType']];
     }
     if (empty($_REQUEST['criteriaSearchString']) || !is_string($_REQUEST['criteriaSearchString'])) {
         $this->_criteriaSearchString = '';
         unset($_REQUEST['submit_search']);
     } else {
         $this->_criteriaSearchString = $_REQUEST['criteriaSearchString'];
     }
     $this->_criteriaTables = array();
     if (empty($_REQUEST['criteriaTables']) || !is_array($_REQUEST['criteriaTables'])) {
         unset($_REQUEST['submit_search']);
     } elseif (!isset($_REQUEST['selectall']) && !isset($_REQUEST['unselectall'])) {
         $this->_criteriaTables = array_intersect($_REQUEST['criteriaTables'], $this->_tables_names_only);
     }
     if (isset($_REQUEST['selectall'])) {
         $this->_criteriaTables = $this->_tables_names_only;
     } elseif (isset($_REQUEST['unselectall'])) {
         $this->_criteriaTables = array();
     }
     if (empty($_REQUEST['criteriaColumnName']) || !is_string($_REQUEST['criteriaColumnName'])) {
         unset($this->_criteriaColumnName);
     } else {
         $this->_criteriaColumnName = PMA_Util::sqlAddSlashes($_REQUEST['criteriaColumnName'], true);
     }
 }
Beispiel #13
0
require_once './libraries/common.lib.php';
/**
 * Gets some core libraries and send headers
 */
require './libraries/db_details_common.inc.php';
// If config variable $cfg['Usedbsearch'] is on FALSE : exit.
if (!$cfg['UseDbSearch']) {
    PMA_mysqlDie($strAccessDenied, '', FALSE, $err_url);
}
// end if
$url_query .= '&amp;goto=db_search.php';
$url_params['goto'] = 'db_search.php';
/**
 * Get the list of tables from the current database
 */
$tables = PMA_DBI_get_tables($GLOBALS['db']);
$num_tables = count($tables);
/**
 * Displays top links
 */
$sub_part = '';
require './libraries/db_details_links.inc.php';
/**
 * 1. Main search form has been submitted
 */
if (isset($_REQUEST['submit_search'])) {
    /**
     * Builds the SQL search query
     *
     * @param   string   the table name
     * @param   string   the string to search