*/ /** * Gets some core libraries and send headers */ require('./db_details_common.php'); // If config variable $cfg['Usedbsearch'] is on FALSE : exit. if (!$cfg['UseDbSearch']) { PMA_mysqlDie($strAccessDenied, '', FALSE, $err_url); } // end if $url_query .= '&goto=db_search.php'; /** * Get the list of tables from the current database */ $tables = PMA_DBI_get_tables($db); $num_tables = count($tables); /** * Displays top links */ $sub_part = ''; require('./db_details_links.php'); /** * 1. Main search form has been submitted */ if (isset($submit_search)) { /** * Builds the SQL search query * * @param string the table name * @param string the string to search * @param integer type of search (1 -> 1 word at least, 2 -> all words, * 3 -> exact string, 4 -> regexp) * * @return array 3 SQL querys (for count, display and delete results) * * @global string the url to return to in case of errors */ function PMA_getSearchSqls($table, $search_str, $search_option) { global $err_url, $charset_connection; // Statement types $sqlstr_select = 'SELECT'; $sqlstr_delete = 'DELETE'; // Fields to select $res = PMA_DBI_query('SHOW ' . (PMA_MYSQL_INT_VERSION >= 40100 ? 'FULL ' : '') . 'FIELDS FROM ' . PMA_backquote($table) . ' FROM ' . PMA_backquote($GLOBALS['db']) . ';'); while ($current = PMA_DBI_fetch_assoc($res)) { if (PMA_MYSQL_INT_VERSION >= 40100) { list($current['Charset']) = explode('_', $current['Collation']); } $current['Field'] = PMA_backquote($current['Field']); $tblfields[] = $current; } // while PMA_DBI_free_result($res); unset($current, $res); $tblfields_cnt = count($tblfields); // Table to use $sqlstr_from = ' FROM ' . PMA_backquote($GLOBALS['db']) . '.' . PMA_backquote($table); // Beginning of WHERE clause $sqlstr_where = ' WHERE'; $search_words = (($search_option > 2) ? array($search_str) : explode(' ', $search_str)); $search_wds_cnt = count($search_words); $like_or_regex = (($search_option == 4) ? 'REGEXP' : 'LIKE'); $automatic_wildcard = (($search_option <3) ? '%' : ''); for ($i = 0; $i < $search_wds_cnt; $i++) { // Eliminates empty values // In MySQL 4.1, if a field has no collation we get NULL in Charset // but in MySQL 5.0.x we get '' if (!empty($search_words[$i])) { for ($j = 0; $j < $tblfields_cnt; $j++) { if (PMA_MYSQL_INT_VERSION >= 40100 && $tblfields[$j]['Charset'] != $charset_connection && $tblfields[$j]['Charset'] != 'NULL' && $tblfields[$j]['Charset'] != '') { $prefix = 'CONVERT(_utf8 '; $suffix = ' USING ' . $tblfields[$j]['Charset'] . ') COLLATE ' . $tblfields[$j]['Collation']; } else { $prefix = $suffix = ''; } $thefieldlikevalue[] = $tblfields[$j]['Field'] . ' ' . $like_or_regex . ' ' . $prefix . '\'' . $automatic_wildcard . $search_words[$i] . $automatic_wildcard . '\'' . $suffix; } // end for $fieldslikevalues[] = ($search_wds_cnt > 1) ? '(' . implode(' OR ', $thefieldlikevalue) . ')' : implode(' OR ', $thefieldlikevalue); unset($thefieldlikevalue); } // end if } // end for $implode_str = ($search_option == 1 ? ' OR ' : ' AND '); $sqlstr_where .= ' ' . implode($implode_str, $fieldslikevalues); unset($fieldslikevalues); // Builds complete queries $sql['select_fields'] = $sqlstr_select . ' * ' . $sqlstr_from . $sqlstr_where; $sql['select_count'] = $sqlstr_select . ' COUNT(*) AS count' . $sqlstr_from . $sqlstr_where; $sql['delete'] = $sqlstr_delete . $sqlstr_from . $sqlstr_where; return $sql; } // end of the "PMA_getSearchSqls()" function /** * Displays the results */ if (!empty($search_str) && !empty($search_option)) { $original_search_str = $search_str; $search_str = PMA_sqlAddslashes($search_str, TRUE); // Get the true string to display as option's comment switch ($search_option) { case 1: $option_str = ' (' . $strSearchOption1 . ')'; break; case 2: $option_str = ' (' . $strSearchOption2 . ')'; break; case 3: $option_str = ' (' . $strSearchOption3 . ')'; break; case 4: $option_str = ' (' . $strSearchOption4 . ')'; break; } // end switch // If $table is defined or if there is only one table in $table_select // set $onetable to the table's name (display is different if there is // only one table). // // Recall: // $tables is an array with all tables in database $db // $num_tables is the size of $tables if (isset($table)) { $onetable = $table; } else if (isset($table_select)) { $num_selectedtables = count($table_select); if ($num_selectedtables == 1) { $onetable = $table_select[0]; } } else if ($num_tables == 1) { $onetable = $tables[0]; } else { for ($i = 0; $i < $num_tables; $i++) { $table_select[] = $tables[$i]; } $num_selectedtables = $num_tables; } // end if... else if... else ?>
' . "\n"; // Gets the SQL statements $newsearchsqls = PMA_getSearchSqls($onetable, $search_str, $search_option); // Executes the "COUNT" statement $res = PMA_DBI_query($newsearchsqls['select_count']); $res_cnt = PMA_DBI_fetch_assoc($res); $res_cnt = $res_cnt['count']; PMA_DBI_free_result($res); $num_search_result_total = $res_cnt; echo ' ' . "\n" . '
' . "\n" . ' \n"; if ($res_cnt > 0) { echo '\n"; echo '\n"; } // end if echo '
' . sprintf($strNumSearchResultsInTable, $res_cnt, htmlspecialchars($onetable)) . "' . PMA_linkOrButton('sql.php?' . $url_sql_query . '&sql_query=' .urlencode($newsearchsqls['select_fields']), $strBrowse, '') . "' . PMA_linkOrButton('sql.php?' . $url_sql_query . '&sql_query=' .urlencode($newsearchsqls['delete']), $strDelete, $newsearchsqls['delete']) . "
' . "\n"; } // end only one table // Several tables defined in the array $table_select else if (isset($table_select)) { // Displays search string echo ' ' . sprintf($strSearchResultsFor, htmlspecialchars($original_search_str), $option_str) . "\n"; echo ' ' . "\n"; echo '

' . sprintf($strNumSearchResultsTotal, $num_search_result_total) . '

' . "\n"; } // end several tables echo "\n"; ?>
 
  /> *
/> *
/>
/>

  1) { $i = 0; echo ' ' . "\n"; $strDoSelectAll = '' . $strSelectAll . '' . ' / ' . '' . $strUnselectAll . ''; } else { echo "\n"; echo ' ' . htmlspecialchars($tables[0]) . "\n"; echo ' ' . "\n"; } // end if... else... echo"\n"; ?>