*/ function PMA_query_as_cu($sql, $show_error = TRUE, $options = 0) { global $err_url_0, $db, $dbh, $cfgRelation; PMA_DBI_select_db($cfgRelation['db'], $dbh); if ($show_error) { $result = PMA_DBI_query($sql, $dbh, $options); } else { $result = @PMA_DBI_try_query($sql, $dbh, $options); } // end if... else... PMA_DBI_select_db($db, $dbh); if ($result) { return $result; } else { return FALSE; } } // end of the "PMA_query_as_cu()" function /** * Defines the relation parameters for the current user * just a copy of the functions used for relations ;-) * but added some stuff to check what will work * * @param boolean whether to check validity of settings or not * * @return array the relation parameters for the current user * * @global array the list of settings for servers * @global integer the id of the current server * @global string the URL of the page to show in case of error * @global string the name of the current db * @global string the name of the current table * @global array configuration infos about the relations stuff * * @access public * * @author Mike Beck */ function PMA_getRelationsParam($verbose = FALSE) { global $cfg, $server, $err_url_0, $db, $table; global $cfgRelation; $cfgRelation = array(); $cfgRelation['relwork'] = FALSE; $cfgRelation['displaywork'] = FALSE; $cfgRelation['bookmarkwork']= FALSE; $cfgRelation['pdfwork'] = FALSE; $cfgRelation['commwork'] = FALSE; $cfgRelation['mimework'] = FALSE; $cfgRelation['historywork'] = FALSE; $cfgRelation['allworks'] = FALSE; // No server selected -> no bookmark table // we return the array with the FALSEs in it, // to avoid some 'Unitialized string offset' errors later if ($server == 0 || empty($cfg['Server']) || empty($cfg['Server']['pmadb'])) { if ($verbose == TRUE) { echo 'PMA Database ... ' . '' . $GLOBALS['strNotOK'] . '' . '[ ' . $GLOBALS['strDocu'] . ' ]
' . "\n" . $GLOBALS['strGeneralRelationFeat'] . ' ' . $GLOBALS['strDisabled'] . '' . "\n"; } return $cfgRelation; } $cfgRelation['user'] = $cfg['Server']['user']; $cfgRelation['db'] = $cfg['Server']['pmadb']; // Now I just check if all tables that i need are present so I can for // example enable relations but not pdf... // I was thinking of checking if they have all required columns but I // fear it might be too slow // PMA_DBI_select_db($cfgRelation['db']); $tab_query = 'SHOW TABLES FROM ' . PMA_backquote($cfgRelation['db']); $tab_rs = PMA_query_as_cu($tab_query, FALSE, PMA_DBI_QUERY_STORE); if ($tab_rs) { while ($curr_table = @PMA_DBI_fetch_row($tab_rs)) { if ($curr_table[0] == $cfg['Server']['bookmarktable']) { $cfgRelation['bookmark'] = $curr_table[0]; } else if ($curr_table[0] == $cfg['Server']['relation']) { $cfgRelation['relation'] = $curr_table[0]; } else if ($curr_table[0] == $cfg['Server']['table_info']) { $cfgRelation['table_info'] = $curr_table[0]; } else if ($curr_table[0] == $cfg['Server']['table_coords']) { $cfgRelation['table_coords'] = $curr_table[0]; } else if ($curr_table[0] == $cfg['Server']['column_info']) { $cfgRelation['column_info'] = $curr_table[0]; } else if ($curr_table[0] == $cfg['Server']['pdf_pages']) { $cfgRelation['pdf_pages'] = $curr_table[0]; } else if ($curr_table[0] == $cfg['Server']['history']) { $cfgRelation['history'] = $curr_table[0]; } } // end while } if (isset($cfgRelation['relation'])) { $cfgRelation['relwork'] = TRUE; if (isset($cfgRelation['table_info'])) { $cfgRelation['displaywork'] = TRUE; } } if (isset($cfgRelation['table_coords']) && isset($cfgRelation['pdf_pages'])) { $cfgRelation['pdfwork'] = TRUE; } if (isset($cfgRelation['column_info'])) { $cfgRelation['commwork'] = TRUE; if ($cfg['Server']['verbose_check']) { $mime_query = 'SHOW FIELDS FROM ' . PMA_backquote($cfgRelation['db']) . '.' . PMA_backquote($cfgRelation['column_info']); $mime_rs = PMA_query_as_cu($mime_query, FALSE); $mime_field_mimetype = FALSE; $mime_field_transformation = FALSE; $mime_field_transformation_options = FALSE; while ($curr_mime_field = @PMA_DBI_fetch_row($mime_rs)) { if ($curr_mime_field[0] == 'mimetype') { $mime_field_mimetype = TRUE; } else if ($curr_mime_field[0] == 'transformation') { $mime_field_transformation = TRUE; } else if ($curr_mime_field[0] == 'transformation_options') { $mime_field_transformation_options = TRUE; } } PMA_DBI_free_result($mime_rs); if ($mime_field_mimetype == TRUE && $mime_field_transformation == TRUE && $mime_field_transformation_options == TRUE) { $cfgRelation['mimework'] = TRUE; } } else { $cfgRelation['mimework'] = TRUE; } } if (isset($cfgRelation['history'])) { $cfgRelation['historywork'] = TRUE; } if (isset($cfgRelation['bookmark'])) { $cfgRelation['bookmarkwork'] = TRUE; } if ($cfgRelation['relwork'] == TRUE && $cfgRelation['displaywork'] == TRUE && $cfgRelation['pdfwork'] == TRUE && $cfgRelation['commwork'] == TRUE && $cfgRelation['mimework'] == TRUE && $cfgRelation['historywork'] == TRUE && $cfgRelation['bookmarkwork'] == TRUE) { $cfgRelation['allworks'] = TRUE; } if ($tab_rs) { PMA_DBI_free_result($tab_rs); } else { $cfg['Server']['pmadb'] = FALSE; } if ($verbose == TRUE) { $shit = '' . $GLOBALS['strNotOK'] . ' [ ' . $GLOBALS['strDocu'] . ' ]'; $hit = '' . $GLOBALS['strOK'] . ''; $enabled = '' . $GLOBALS['strEnabled'] . ''; $disabled = '' . $GLOBALS['strDisabled'] . ''; echo '' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; echo ' ' . "\n"; if (($cfgRelation['commwork'] == TRUE) && ($cfgRelation['mimework'] != TRUE)) { echo '' . "\n"; } echo ' ' . "\n"; echo ' ' . "\n"; echo '
$cfg[\'Servers\'][$i][\'pmadb\'] ... ' . (($cfg['Server']['pmadb'] == FALSE) ? sprintf($shit, 'pmadb') : $hit) . '
 
$cfg[\'Servers\'][$i][\'relation\'] ... ' . ((isset($cfgRelation['relation'])) ? $hit : sprintf($shit, 'relation')) . '
'. $GLOBALS['strGeneralRelationFeat'] . ': ' . (($cfgRelation['relwork'] == TRUE) ? $enabled : $disabled) . '
 
$cfg[\'Servers\'][$i][\'table_info\'] ... ' . (($cfgRelation['displaywork'] == FALSE) ? sprintf($shit, 'table_info') : $hit) . '
' . $GLOBALS['strDisplayFeat'] . ': ' . (($cfgRelation['displaywork'] == TRUE) ? $enabled : $disabled) . '
 
$cfg[\'Servers\'][$i][\'table_coords\'] ... ' . ((isset($cfgRelation['table_coords'])) ? $hit : sprintf($shit, 'table_coords')) . '
$cfg[\'Servers\'][$i][\'pdf_pages\'] ... ' . ((isset($cfgRelation['pdf_pages'])) ? $hit : sprintf($shit, 'table_coords')) . '
' . $GLOBALS['strCreatePdfFeat'] . ': ' . (($cfgRelation['pdfwork'] == TRUE) ? $enabled : $disabled) . '
 
$cfg[\'Servers\'][$i][\'column_info\'] ... ' . ((isset($cfgRelation['column_info'])) ? $hit : sprintf($shit, 'col_com')) . '
' . $GLOBALS['strColComFeat'] . ': ' . (($cfgRelation['commwork'] == TRUE) ? $enabled : $disabled) . '
' . $GLOBALS['strBookmarkQuery'] . ': ' . (($cfgRelation['bookmarkwork'] == TRUE) ? $enabled : $disabled) . '
MIME ...' . (($cfgRelation['mimework'] == TRUE) ? $hit : sprintf($shit, 'col_com')) . '
' . $GLOBALS['strUpdComTab'] . '
$cfg[\'Servers\'][$i][\'history\'] ... ' . ((isset($cfgRelation['history'])) ? $hit : sprintf($shit, 'history')) . '
' . $GLOBALS['strQuerySQLHistory'] . ': ' . (($cfgRelation['historywork'] == TRUE) ? $enabled : $disabled) . '
' . "\n"; } // end if ($verbose == TRUE) { return $cfgRelation; } // end of the 'PMA_getRelationsParam()' function /** * Gets all Relations to foreign tables for a given table or * optionally a given column in a table * * @param string the name of the db to check for * @param string the name of the table to check for * @param string the name of the column to check for * @param string the source for foreign key information * * @return array db,table,column * * @global array the list of relations settings * @global string the URL of the page to show in case of error * @global string the connection charset, as defined in * libraries/database_interface.lib.php * * @access public * * @author Mike Beck and Marc Delisle */ function PMA_getForeigners($db, $table, $column = '', $source = 'both') { global $cfgRelation, $err_url_0, $charset_connection; if ($cfgRelation['relwork'] && ($source == 'both' || $source == 'internal')) { $rel_query = 'SELECT master_field, foreign_db, foreign_table, foreign_field' . ' FROM ' . PMA_backquote($cfgRelation['relation']); if (PMA_MYSQL_INT_VERSION >= 40100) { $rel_query .= ' WHERE CONVERT(master_db USING ' . $charset_connection . ') = \'' . PMA_sqlAddslashes($db) . '\' ' . ' AND CONVERT(master_table USING ' . $charset_connection . ') = \'' . PMA_sqlAddslashes($table) . '\' '; if (!empty($column)) { $rel_query .= ' AND CONVERT(master_field USING ' . $charset_connection . ') = \'' . PMA_sqlAddslashes($column) . '\''; } } else { $rel_query .= ' WHERE master_db = \'' . PMA_sqlAddslashes($db) . '\' ' . ' AND master_table = \'' . PMA_sqlAddslashes($table) . '\' '; if (!empty($column)) { $rel_query .= ' AND master_field = \'' . PMA_sqlAddslashes($column) . '\''; } } $relations = PMA_query_as_cu($rel_query); $i = 0; while ($relrow = PMA_DBI_fetch_assoc($relations)) { $field = $relrow['master_field']; $foreign[$field]['foreign_db'] = $relrow['foreign_db']; $foreign[$field]['foreign_table'] = $relrow['foreign_table']; $foreign[$field]['foreign_field'] = $relrow['foreign_field']; $i++; } // end while PMA_DBI_free_result($relations); unset($relations); } if (($source == 'both' || $source == 'innodb') && !empty($table)) { $show_create_table_query = 'SHOW CREATE TABLE ' . PMA_backquote($db) . '.' . PMA_backquote($table); $show_create_table_res = PMA_DBI_query($show_create_table_query); list(,$show_create_table) = PMA_DBI_fetch_row($show_create_table_res); PMA_DBI_free_result($show_create_table_res); unset($show_create_table_res, $show_create_table_query); $analyzed_sql = PMA_SQP_analyze(PMA_SQP_parse($show_create_table)); foreach ($analyzed_sql[0]['foreign_keys'] AS $one_key) { // the analyzer may return more than one column name in the // index list or the ref_index_list foreach ($one_key['index_list'] AS $i => $field) { // If a foreign key is defined in the 'internal' source (pmadb) // and in 'innodb', we won't get it twice if $source='both' // because we use $field as key // The parser looks for a CONSTRAINT clause just before // the FOREIGN KEY clause. It finds it (as output from // SHOW CREATE TABLE) in MySQL 4.0.13, but not in older // versions like 3.23.58. // In those cases, the FOREIGN KEY parsing will put numbers // like -1, 0, 1... instead of the constraint number. if (isset($one_key['constraint'])) { $foreign[$field]['constraint'] = $one_key['constraint']; } if (isset($one_key['ref_db_name'])) { $foreign[$field]['foreign_db'] = $one_key['ref_db_name']; } else { $foreign[$field]['foreign_db'] = $db; } $foreign[$field]['foreign_table'] = $one_key['ref_table_name']; $foreign[$field]['foreign_field'] = $one_key['ref_index_list'][$i]; if (isset($one_key['on_delete'])) { $foreign[$field]['on_delete'] = $one_key['on_delete']; } if (isset($one_key['on_update'])) { $foreign[$field]['on_update'] = $one_key['on_update']; } } } } if (isset($foreign) && is_array($foreign)) { return $foreign; } else { return FALSE; } } // end of the 'PMA_getForeigners()' function /** * Gets the display field of a table * * @param string the name of the db to check for * @param string the name of the table to check for * * @return string field name * * @global array the list of relations settings * @global string the connection charset, as defined in * libraries/database_interface.lib.php * * @access public * * @author Mike Beck */ function PMA_getDisplayField($db, $table) { global $cfgRelation, $charset_connection; if (trim(@$cfgRelation['table_info']) == '') { return FALSE; } $disp_query = 'SELECT display_field FROM ' . PMA_backquote($cfgRelation['table_info']); if (PMA_MYSQL_INT_VERSION >= 40100) { $disp_query .= ' WHERE CONVERT(db_name USING ' . $charset_connection . ') = \'' . PMA_sqlAddslashes($db) . '\'' . ' AND CONVERT(table_name USING ' . $charset_connection . ') = \'' . PMA_sqlAddslashes($table) . '\''; } else { $disp_query .= ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\'' . ' AND table_name = \'' . PMA_sqlAddslashes($table) . '\''; } $disp_res = PMA_query_as_cu($disp_query); $row = ($disp_res ? PMA_DBI_fetch_assoc($disp_res) : ''); PMA_DBI_free_result($disp_res); if (isset($row['display_field'])) { return $row['display_field']; } else { return FALSE; } } // end of the 'PMA_getDisplayField()' function /** * Gets the comments for all rows of a table * * @param string the name of the db to check for * @param string the name of the table to check for * * @return array [field_name] = comment * * @global array the list of relations settings * @global string the connection charset, as defined in * libraries/database_interface.lib.php * * @access public * * @authors Mike Beck * and lem9 */ function PMA_getComments($db, $table = '') { global $cfgRelation, $charset_connection; if ($table != '') { // MySQL 4.1.x native column comments if (PMA_MYSQL_INT_VERSION >= 40100) { $fields = PMA_DBI_get_fields($db, $table); foreach($fields as $key=>$field) { $tmp_col = $field['Field']; if (!empty($field['Comment'])) { $native_comment[$tmp_col] = $field['Comment']; } } } // pmadb internal column comments $com_qry = 'SELECT column_name, comment FROM ' . PMA_backquote($cfgRelation['db']) . '.' .PMA_backquote($cfgRelation['column_info']); if (PMA_MYSQL_INT_VERSION >= 40100) { $com_qry .= ' WHERE CONVERT(db_name USING ' . $charset_connection . ') = \'' . PMA_sqlAddslashes($db) . '\'' . ' AND CONVERT(table_name USING ' . $charset_connection . ') = \'' . PMA_sqlAddslashes($table) . '\''; } else { $com_qry .= ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\'' . ' AND table_name = \'' . PMA_sqlAddslashes($table) . '\''; } $com_rs = PMA_query_as_cu($com_qry, TRUE, PMA_DBI_QUERY_STORE); } else { // pmadb internal db comments $com_qry = 'SELECT ' . PMA_backquote('comment') . ' FROM ' . PMA_backquote($cfgRelation['db']) . '.' . PMA_backquote($cfgRelation['column_info']); if (PMA_MYSQL_INT_VERSION >= 40100) { $com_qry .= ' WHERE CONVERT(db_name USING ' . $charset_connection . ') = \'' . PMA_sqlAddslashes($db) . '\'' . ' AND CONVERT(table_name USING ' . $charset_connection . ') = \'\'' . ' AND CONVERT(column_name USING ' . $charset_connection . ') = \'(db_comment)\''; } else { $com_qry .= ' WHERE db_name = \'' . PMA_sqlAddslashes($db) . '\'' . ' AND table_name = \'\'' . ' AND column_name = \'(db_comment)\''; } $com_rs = PMA_query_as_cu($com_qry, TRUE, PMA_DBI_QUERY_STORE); } if (PMA_DBI_num_rows($com_rs) > 0) { $i = 0; while ($row = PMA_DBI_fetch_assoc($com_rs)) { $i++; $col = ($table != '' ? $row['column_name'] : $i); if (strlen($row['comment']) > 0) { $comment[$col] = $row['comment']; // if this version supports native comments and this function // was called with a table parameter if (PMA_MYSQL_INT_VERSION >= 40100 && !empty($table)) { // if native comment found, use it instead of pmadb if (!empty($native_comment[$col])) { $comment[$col] = $native_comment[$col]; } else { // no native comment, so migrate pmadb-style to native PMA_setComment($db, $table, $col, $comment[$col],'','native'); // and erase the pmadb-style comment PMA_setComment($db, $table, $col, '','','pmadb'); } } } } // end while PMA_DBI_free_result($com_rs); unset($com_rs); } else { if (isset($native_comment)) { $comment = $native_comment; } } if (isset($comment) && is_array($comment)) { return $comment; } else { return FALSE; } } // end of the 'PMA_getComments()' function /** * Adds/removes slashes if required * * @param string the string to slash * * @return string the slashed string * * @access public */ function PMA_handleSlashes($val) { return (get_magic_quotes_gpc() ? str_replace('\\"', '"', $val) : PMA_sqlAddslashes($val)); } // end of the "PMA_handleSlashes()" function /** * Set a single comment to a certain value. * * @param string the name of the db * @param string the name of the table * @param string the name of the column * @param string the value of the column * @param string (optional) if a column is renamed, this is the name of the former key which will get deleted * * @return boolean true, if comment-query was made. * * @global array the list of relations settings * @global string the connection charset, as defined in * libraries/database_interface.lib.php * * @access public */ function PMA_setComment($db, $table, $col, $comment, $removekey = '', $mode='auto') { global $cfgRelation, $charset_connection; if ($mode=='auto') { if (PMA_MYSQL_INT_VERSION >= 40100) { $mode='native'; } else { $mode='pmadb'; } } if ($mode == 'native') { $fields = PMA_DBI_get_fields($db, $table); // TODO: get directly the information of $col foreach($fields as $key=>$field) { $tmp_col = $field['Field']; $types[$tmp_col] = $field['Type']; $collations[$tmp_col] = $field['Collation']; $nulls[$tmp_col] = $field['Null']; $defaults[$tmp_col] = $field['Default']; $extras[$tmp_col] = $field['Extra']; if ($tmp_col == $col) { break; } } $query = 'ALTER TABLE ' . PMA_backquote($table) . ' CHANGE ' . PMA_generateAlterTable($col, $col, $types[$col], $collations[$col], $nulls[$col], $defaults[$col], $extras[$col], $comment); PMA_DBI_try_query($query, NULL, PMA_DBI_QUERY_STORE); return TRUE; } // $mode == 'pmadb' section: if (PMA_MYSQL_INT_VERSION >= 40100) { $cols = array( 'db_name' => 'CONVERT(db_name USING ' . $charset_connection . ')', 'table_name' => 'CONVERT(table_name USING ' . $charset_connection . ')', 'column_name' => 'CONVERT(column_name USING ' . $charset_connection . ')' ); } else { $cols = array( 'db_name' => 'db_name ', 'table_name' => 'table_name ', 'column_name' => 'column_name' ); } if ($removekey != '' AND $removekey != $col) { $remove_query = 'DELETE FROM ' . PMA_backquote($cfgRelation['column_info']) . ' WHERE ' . $cols['db_name'] . ' = \'' . PMA_sqlAddslashes($db) . '\'' . ' AND ' . $cols['table_name'] . ' = \'' . PMA_sqlAddslashes($table) . '\'' . ' AND ' . $cols['column_name'] . ' = \'' . PMA_sqlAddslashes($removekey) . '\''; PMA_query_as_cu($remove_query); unset($remove_query); } $test_qry = 'SELECT ' . PMA_backquote('comment') . ', mimetype, transformation, transformation_options FROM ' . PMA_backquote($cfgRelation['column_info']) . ' WHERE ' . $cols['db_name'] . ' = \'' . PMA_sqlAddslashes($db) . '\'' . ' AND ' . $cols['table_name'] . ' = \'' . PMA_sqlAddslashes($table) . '\'' . ' AND ' . $cols['column_name'] . ' = \'' . PMA_sqlAddslashes($col) . '\''; $test_rs = PMA_query_as_cu($test_qry, TRUE, PMA_DBI_QUERY_STORE); if ($test_rs && PMA_DBI_num_rows($test_rs) > 0) { $row = PMA_DBI_fetch_assoc($test_rs); PMA_DBI_free_result($test_rs); if (strlen($comment) > 0 || strlen($row['mimetype']) > 0 || strlen($row['transformation']) > 0 || strlen($row['transformation_options']) > 0) { $upd_query = 'UPDATE ' . PMA_backquote($cfgRelation['column_info']) . ' SET ' . PMA_backquote('comment') . ' = \'' . PMA_sqlAddslashes($comment) . '\'' . ' WHERE ' . $cols['db_name'] . ' = \'' . PMA_sqlAddslashes($db) . '\'' . ' AND ' . $cols['table_name'] . ' = \'' . PMA_sqlAddslashes($table) . '\'' . ' AND ' . $cols['column_name'] . ' = \'' . PMA_sqlAddSlashes($col) . '\''; } else { $upd_query = 'DELETE FROM ' . PMA_backquote($cfgRelation['column_info']) . ' WHERE ' . $cols['db_name'] . ' = \'' . PMA_sqlAddslashes($db) . '\'' . ' AND ' . $cols['table_name'] . ' = \'' . PMA_sqlAddslashes($table) . '\'' . ' AND ' . $cols['column_name'] . ' = \'' . PMA_sqlAddslashes($col) . '\''; } } else if (strlen($comment) > 0) { $upd_query = 'INSERT INTO ' . PMA_backquote($cfgRelation['column_info']) . ' (db_name, table_name, column_name, ' . PMA_backquote('comment') . ') ' . ' VALUES(' . '\'' . PMA_sqlAddslashes($db) . '\',' . '\'' . PMA_sqlAddslashes($table) . '\',' . '\'' . PMA_sqlAddslashes($col) . '\',' . '\'' . PMA_sqlAddslashes($comment) . '\')'; } if (isset($upd_query)){ $upd_rs = PMA_query_as_cu($upd_query); unset($upd_query); return true; } else { return false; } } // end of 'PMA_setComment()' function /** * Set a SQL history entry * * @param string the name of the db * @param string the name of the table * @param string the username * @param string the sql query * * @global array the list of relations settings * @global string the connection charset, as defined in * libraries/database_interface.lib.php * * @return boolean true * * @access public */ function PMA_setHistory($db, $table, $username, $sqlquery) { global $cfgRelation; $hist_rs = PMA_query_as_cu('INSERT INTO ' . PMA_backquote($cfgRelation['history']) . ' (' . PMA_backquote('username') . ',' . PMA_backquote('db') . ',' . PMA_backquote('table') . ',' . PMA_backquote('timevalue') . ',' . PMA_backquote('sqlquery') . ') VALUES (' . '\'' . PMA_sqlAddslashes($username) . '\',' . '\'' . PMA_sqlAddslashes($db) . '\',' . '\'' . PMA_sqlAddslashes($table) . '\',' . 'NOW(),' . '\'' . PMA_sqlAddslashes($sqlquery) . '\')'); return true; } // end of 'PMA_setHistory()' function /** * Gets a SQL history entry * * @param string the username * * @global array the list of relations settings * @global string the connection charset, as defined in * libraries/database_interface.lib.php * * @return array list of history items * * @access public */ function PMA_getHistory($username) { global $cfgRelation, $charset_connection; $hist_query = 'SELECT ' . PMA_backquote('db') . ',' . PMA_backquote('table') . ',' . PMA_backquote('sqlquery') . ' FROM ' . PMA_backquote($cfgRelation['history']) . ' WHERE '; if (PMA_MYSQL_INT_VERSION >= 40100) { $hist_query .= 'CONVERT(username USING ' . $charset_connection . ')'; } else { $hist_query .= 'username'; } $hist_query .= ' = \'' . PMA_sqlAddslashes($username) . '\' ORDER BY id DESC'; $hist_rs = PMA_query_as_cu($hist_query); unset($hist_query); $history = array(); while ($row = PMA_DBI_fetch_assoc($hist_rs)) { $history[] = $row; } PMA_DBI_free_result($hist_rs); return $history; } // end of 'PMA_getHistory()' function /** * Set a SQL history entry * * @param string the name of the db * @param string the name of the table * @param string the username * @param string the sql query * * @global array the list of relations settings * @global array global phpMyAdmin configuration * @global string the connection charset, as defined in * libraries/database_interface.lib.php * * @return boolean true * * @access public */ function PMA_purgeHistory($username) { global $cfgRelation, $cfg, $charset_connection; $purge_query = 'SELECT timevalue FROM ' . PMA_backquote($cfgRelation['history']) . ' WHERE '; if (PMA_MYSQL_INT_VERSION >= 40100) { $purge_query .= 'CONVERT(username USING ' . $charset_connection . ')'; } else { $purge_query .= 'username'; } $purge_query .= ' = \'' . PMA_sqlAddSlashes($username) . '\' ORDER BY timevalue DESC LIMIT ' . $cfg['QueryHistoryMax'] . ', 1'; $purge_rs = PMA_query_as_cu($purge_query); $i = 0; $row = PMA_DBI_fetch_row($purge_rs); PMA_DBI_free_result($purge_rs); if (is_array($row) && isset($row[0]) && $row[0] > 0) { $maxtime = $row[0]; // quotes added around $maxtime to prevent a difficult to // reproduce problem $remove_rs = PMA_query_as_cu('DELETE FROM ' . PMA_backquote($cfgRelation['history']) . ' WHERE timevalue <= "' . $maxtime . '"'); } return true; } // end of 'PMA_purgeHistory()' function /** * Outputs dropdown with values of foreign fields * * @param string the query of the foreign keys * @param string the foreign field * @param string the foreign field to display * @param string the current data of the dropdown * * @global array global phpMyAdmin configuration * * @return string the ' . "\n"; $reloptions = array('content-id' => array(), 'id-content' => array()); foreach ($disp AS $disp_key => $relrow) { $key = $relrow[$foreign_field]; // if the display field has been defined for the foreign table if ($foreign_display) { if (PMA_strlen($relrow[$foreign_display]) <= $cfg['LimitChars']) { $value = htmlspecialchars($relrow[$foreign_display]); $vtitle = ''; } else { $vtitle = htmlspecialchars($relrow[$foreign_display]); $value = htmlspecialchars(substr($vtitle, 0, $cfg['LimitChars']) . '...'); } } else { $vtitle = $value = ''; } // end if ($foreign_display) $reloption = '' . "\n"; $reloptions['content-id'][] = $reloption . '>' . htmlspecialchars($key) . ' - ' . $value . '' . "\n"; } // end while // the list of keys looks better if not sorted by description if ($cfg['NaturalOrder']) { natsort($reloptions['content-id']); } else { asort($reloptions['content-id']); } if ($max == -1 || count($reloptions['content-id']) < $max) { $ret .= implode('', $reloptions['content-id']); if (count($reloptions['content-id']) > 0) { $ret .= '' . "\n"; $ret .= '' . "\n"; } } $ret .= implode('', $reloptions['id-content']); return $ret; } // end of 'PMA_foreignDropdown()' function ?>