/** * Inserts existing entries in a PMA_* table by reading a value from an old entry * * @param string The array index, which Relation feature to check * ('relwork', 'commwork', ...) * @param string The array index, which PMA-table to update * ('bookmark', 'relation', ...) * @param array Which fields will be SELECT'ed from the old entry * @param array Which fields will be used for the WHERE query * (array('FIELDNAME' => 'FIELDVALUE')) * @param array Which fields will be used as new VALUES. These are the important * keys which differ from the old entry. * (array('FIELDNAME' => 'NEW FIELDVALUE')) * @global string relation variable * * @author Garvin Hicking <*****@*****.**> */ function PMA_duplicate_table_info($work, $pma_table, $get_fields, $where_fields, $new_fields) { global $cfgRelation; $last_id = -1; if ($cfgRelation[$work]) { $select_parts = array(); $row_fields = array(); foreach ($get_fields as $nr => $get_field) { $select_parts[] = PMA_backquote($get_field); $row_fields[$get_field] = 'cc'; } $where_parts = array(); foreach ($where_fields as $_where => $_value) { $where_parts[] = PMA_backquote($_where) . ' = \'' . PMA_sqlAddslashes($_value) . '\''; } $new_parts = array(); $new_value_parts = array(); foreach ($new_fields as $_where => $_value) { $new_parts[] = PMA_backquote($_where); $new_value_parts[] = PMA_sqlAddslashes($_value); } $table_copy_query = 'SELECT ' . implode(', ', $select_parts) . ' FROM ' . PMA_backquote($cfgRelation[$pma_table]) . ' WHERE ' . implode(' AND ', $where_parts); // must use PMA_DBI_QUERY_STORE here, since we execute another // query inside the loop $table_copy_rs = PMA_query_as_cu($table_copy_query, TRUE, PMA_DBI_QUERY_STORE); while ($table_copy_row = @PMA_DBI_fetch_assoc($table_copy_rs)) { $value_parts = array(); foreach ($table_copy_row as $_key => $_val) { if (isset($row_fields[$_key]) && $row_fields[$_key] == 'cc') { $value_parts[] = PMA_sqlAddslashes($_val); } } $new_table_query = 'INSERT IGNORE INTO ' . PMA_backquote($cfgRelation[$pma_table]) . ' (' . implode(', ', $select_parts) . ', ' . implode(', ', $new_parts) . ')' . ' VALUES ' . ' (\'' . implode('\', \'', $value_parts) . '\', \'' . implode('\', \'', $new_value_parts) . '\')'; $new_table_rs = PMA_query_as_cu($new_table_query); $last_id = PMA_DBI_insert_id(); } // end while return $last_id; } return true; }
$ch_query = 'DELETE FROM ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['pdf_pages']) . ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\'' . ' AND page_nr = ' . $chpage; PMA_query_as_cu($ch_query, FALSE, $query_default_option); unset($chpage); } break; case 'createpage': if (!isset($newpage) || $newpage == '') { $newpage = $strNoDescription; } $ins_query = 'INSERT INTO ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['pdf_pages']) . ' (db_name, page_descr)' . ' VALUES (\'' . PMA_sqlAddslashes($db) . '\', \'' . PMA_sqlAddslashes($newpage) . '\')'; PMA_query_as_cu($ins_query, FALSE, $query_default_option); // A u t o m a t i c l a y o u t // ================================ if (isset($auto_layout_internal) || isset($auto_layout_innodb)) { // save the page number $pdf_page_number = PMA_DBI_insert_id(isset($controllink) ? $controllink : ''); $all_tables = array(); } if (isset($auto_layout_innodb)) { // get the tables list $tables = PMA_DBI_get_tables_full($db); // find the InnoDB ones $innodb_tables = array(); foreach ($tables as $table_name => $table_properties) { if ($table_properties['ENGINE'] == 'InnoDB') { $innodb_tables[] = $table_name; } } $all_tables = $innodb_tables; // could be improved by finding the tables which have the // most references keys and place them at the beginning
foreach ($query as $query_index => $single_query) { if ($cfg['IgnoreMultiSubmitErrors']) { $result = PMA_DBI_try_query($single_query); } else { $result = PMA_DBI_query($single_query); } if (isset($GLOBALS['warning'])) { $warning_message .= $GLOBALS['warning'] . '[br]'; } if (!$result) { $message .= PMA_DBI_getError(); } else { if (@PMA_DBI_affected_rows()) { $total_affected_rows += @PMA_DBI_affected_rows(); } $insert_id = PMA_DBI_insert_id(); if ($insert_id != 0) { $last_message .= '[br]' . $strInsertedRowId . ' ' . $insert_id; } } // end if PMA_DBI_free_result($result); unset($result); } if ($total_affected_rows != 0) { $message .= $total_affected_rows; } else { $message .= $strModifications; } $message .= $last_message; if (!empty($warning_message)) {
/** * Inserts existing entries in a PMA_* table by reading a value from an old * entry * * @param string $work The array index, which Relation feature to * check ('relwork', 'commwork', ...) * @param string $pma_table The array index, which PMA-table to update * ('bookmark', 'relation', ...) * @param array $get_fields Which fields will be SELECT'ed from the old entry * @param array $where_fields Which fields will be used for the WHERE query * (array('FIELDNAME' => 'FIELDVALUE')) * @param array $new_fields Which fields will be used as new VALUES. * These are the important keys which differ * from the old entry * (array('FIELDNAME' => 'NEW FIELDVALUE')) * * @global relation variable * * @return int|true */ public static function duplicateInfo($work, $pma_table, $get_fields, $where_fields, $new_fields) { $last_id = -1; if (isset($GLOBALS['cfgRelation']) && $GLOBALS['cfgRelation'][$work]) { $select_parts = array(); $row_fields = array(); foreach ($get_fields as $get_field) { $select_parts[] = PMA_Util::backquote($get_field); $row_fields[$get_field] = 'cc'; } $where_parts = array(); foreach ($where_fields as $_where => $_value) { $where_parts[] = PMA_Util::backquote($_where) . ' = \'' . PMA_Util::sqlAddSlashes($_value) . '\''; } $new_parts = array(); $new_value_parts = array(); foreach ($new_fields as $_where => $_value) { $new_parts[] = PMA_Util::backquote($_where); $new_value_parts[] = PMA_Util::sqlAddSlashes($_value); } $table_copy_query = ' SELECT ' . implode(', ', $select_parts) . ' FROM ' . PMA_Util::backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_Util::backquote($GLOBALS['cfgRelation'][$pma_table]) . ' WHERE ' . implode(' AND ', $where_parts); // must use PMA_DBI_QUERY_STORE here, since we execute another // query inside the loop $table_copy_rs = PMA_queryAsControlUser($table_copy_query, true, PMA_DBI_QUERY_STORE); while ($table_copy_row = @PMA_DBI_fetch_assoc($table_copy_rs)) { $value_parts = array(); foreach ($table_copy_row as $_key => $_val) { if (isset($row_fields[$_key]) && $row_fields[$_key] == 'cc') { $value_parts[] = PMA_Util::sqlAddSlashes($_val); } } $new_table_query = 'INSERT IGNORE INTO ' . PMA_Util::backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_Util::backquote($GLOBALS['cfgRelation'][$pma_table]) . ' (' . implode(', ', $select_parts) . ', ' . implode(', ', $new_parts) . ') VALUES (\'' . implode('\', \'', $value_parts) . '\', \'' . implode('\', \'', $new_value_parts) . '\')'; PMA_queryAsControlUser($new_table_query); $last_id = PMA_DBI_insert_id(); } // end while PMA_DBI_free_result($table_copy_rs); return $last_id; } return true; }
/** * Create a PDF page * * @param string $newpage name of the new PDF page * @param array $cfgRelation * @param string $db database name * * @return string $pdf_page_number */ function PMA_REL_create_page($newpage, $cfgRelation, $db) { if (!isset($newpage) || $newpage == '') { $newpage = __('no description'); } $ins_query = 'INSERT INTO ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['pdf_pages']) . ' (db_name, page_descr)' . ' VALUES (\'' . PMA_sqlAddSlashes($db) . '\', \'' . PMA_sqlAddSlashes($newpage) . '\')'; PMA_query_as_controluser($ins_query, false); return PMA_DBI_insert_id(isset($GLOBALS['controllink']) ? $GLOBALS['controllink'] : ''); }
/** * Executes the sql query and get the result, then move back to the calling page * * @param array $url_params url paramters array * @param string $query built query from PMA_buildSqlQuery() * * @return array $url_params, $total_affected_rows, $last_messages * $warning_messages, $error_messages, $return_to_sql_query */ function PMA_executeSqlQuery($url_params, $query) { $return_to_sql_query = ''; if (!empty($GLOBALS['sql_query'])) { $url_params['sql_query'] = $GLOBALS['sql_query']; $return_to_sql_query = $GLOBALS['sql_query']; } $GLOBALS['sql_query'] = implode('; ', $query) . ';'; // to ensure that the query is displayed in case of // "insert as new row" and then "insert another new row" $GLOBALS['display_query'] = $GLOBALS['sql_query']; $total_affected_rows = 0; $last_messages = array(); $warning_messages = array(); $error_messages = array(); foreach ($query as $single_query) { if ($_REQUEST['submit_type'] == 'showinsert') { $last_messages[] = PMA_Message::notice(__('Showing SQL query')); continue; } if ($GLOBALS['cfg']['IgnoreMultiSubmitErrors']) { $result = PMA_DBI_try_query($single_query); } else { $result = PMA_DBI_query($single_query); } if (!$result) { $error_messages[] = PMA_Message::sanitize(PMA_DBI_getError()); } else { // The next line contains a real assignment, it's not a typo if ($tmp = @PMA_DBI_affected_rows()) { $total_affected_rows += $tmp; } unset($tmp); $insert_id = PMA_DBI_insert_id(); if ($insert_id != 0) { // insert_id is id of FIRST record inserted in one insert, so if we // inserted multiple rows, we had to increment this if ($total_affected_rows > 0) { $insert_id = $insert_id + $total_affected_rows - 1; } $last_message = PMA_Message::notice(__('Inserted row id: %1$d')); $last_message->addParam($insert_id); $last_messages[] = $last_message; } PMA_DBI_free_result($result); } $warning_messages = PMA_getWarningMessages(); } return array($url_params, $total_affected_rows, $last_messages, $warning_messages, $error_messages, $return_to_sql_query); }
/** * Create a PDF page * * @uses $GLOBALS['strNoDescription'] * @uses PMA_backquote() * @uses $GLOBALS['cfgRelation']['db'] * @uses PMA_sqlAddslashes() * @uses PMA_query_as_cu() * @uses PMA_DBI_insert_id() * @uses $GLOBALS['controllink'] * @param string $newpage * @param array $cfgRelation * @param string $db * @param string $query_default_option * @return string $pdf_page_number */ function PMA_REL_create_page($newpage, $cfgRelation, $db, $query_default_option) { if (! isset($newpage) || $newpage == '') { $newpage = $GLOBALS['strNoDescription']; } $ins_query = 'INSERT INTO ' . PMA_backquote($GLOBALS['cfgRelation']['db']) . '.' . PMA_backquote($cfgRelation['pdf_pages']) . ' (db_name, page_descr)' . ' VALUES (\'' . PMA_sqlAddslashes($db) . '\', \'' . PMA_sqlAddslashes($newpage) . '\')'; PMA_query_as_cu($ins_query, FALSE, $query_default_option); return PMA_DBI_insert_id(isset($GLOBALS['controllink']) ? $GLOBALS['controllink'] : ''); }
PMA_query_as_cu($ch_query, FALSE, $query_default_option); unset($chpage); } break; case 'createpage': if (!isset($newpage) || $newpage == '') { $newpage = $strNoDescription; } $ins_query = 'INSERT INTO ' . PMA_backquote($cfgRelation['pdf_pages']) . ' (db_name, page_descr)' . ' VALUES (\'' . PMA_sqlAddslashes($db) . '\', \'' . PMA_sqlAddslashes($newpage) . '\')'; PMA_query_as_cu($ins_query, FALSE, $query_default_option); // A u t o m a t i c l a y o u t // // TODO: support InnoDB if (isset($autolayout)) { // save the page number $pdf_page_number = PMA_DBI_insert_id(isset($dbh) ? $dbh : ''); // get the tables that have relations, by descending // number of links $master_tables = 'SELECT COUNT(master_table), master_table' . ' FROM ' . PMA_backquote($cfgRelation['relation']) . ' WHERE master_db = \'' . $db . '\'' . ' GROUP BY master_table' . ' ORDER BY ' . PMA_backquote('COUNT(master_table)') . ' DESC '; $master_tables_rs = PMA_query_as_cu($master_tables, FALSE, $query_default_option); if ($master_tables_rs && PMA_DBI_num_rows($master_tables_rs) > 0) { // first put all the master tables at beginning // of the list, so they are near the center of // the schema while (list(, $master_table) = PMA_DBI_fetch_row($master_tables_rs)) { $all_tables[] = $master_table; } // then for each master, add its foreigns into an array // of foreign tables, if not already there // (a foreign might be foreign for more than // one table, and might be a master itself)
/** * Create a PDF page * * @param string $newpage name of the new PDF page * @param array $cfgRelation Relation configuration * @param string $db database name * * @return string $pdf_page_number */ function PMA_REL_createPage($newpage, $cfgRelation, $db) { $common_functions = PMA_CommonFunctions::getInstance(); if (!isset($newpage) || $newpage == '') { $newpage = __('no description'); } $ins_query = 'INSERT INTO ' . $common_functions->backquote($GLOBALS['cfgRelation']['db']) . '.' . $common_functions->backquote($cfgRelation['pdf_pages']) . ' (db_name, page_descr)' . ' VALUES (\'' . $common_functions->sqlAddSlashes($db) . '\', \'' . $common_functions->sqlAddSlashes($newpage) . '\')'; PMA_queryAsControlUser($ins_query, false); return PMA_DBI_insert_id(isset($GLOBALS['controllink']) ? $GLOBALS['controllink'] : ''); }