Cerca in tutti i campi da ogni tabella di un database MySQL


298

Voglio cercare in tutti i campi da tutte le tabelle di un database MySQL una data stringa, possibilmente usando la sintassi come:

SELECT * FROM * WHERE * LIKE '%stuff%'

È possibile fare qualcosa del genere?


2
Questo blog potrebbe essere utile: winashwin.wordpress.com/2012/08/28/mysql-search

Risposte:


81

Puoi sbirciare nello information_schemaschema. Ha un elenco di tutte le tabelle e di tutti i campi che si trovano in una tabella. È quindi possibile eseguire query utilizzando le informazioni ottenute da questa tabella.

Le tabelle coinvolte sono SCHEMATA, TAVOLI e COLONNE. Esistono chiavi esterne in modo da poter costruire esattamente come vengono create le tabelle in uno schema.


49
questa non è la risposta che volevo, ma devo accettare la verità. : D Grazie
RSilva,

1
Questo è corretto, ma anche la risposta di @Dan Rather mi ha aiutato, perché il db che stavo guardando era impostato in modo oscuro e non riuscivo a capire quale sarebbe il nome della colonna o della tabella solo guardando ...
DrCord

12
information_schemaè un database, non una tabella. Qualche chiarimento su quale tabella cercare all'interno information_schemasarebbe buono!
CaptSaltyJack

3
È un po 'esilarante per me che MySql non abbia fornito alcun modo di cercare tutti i tavoli. Sembra un'opzione piuttosto rudimentale
Kolob Canyon

@KolobCanyon MySQL offre un'opzione per farlo tramite MOSTRA TABELLE DA nome_db COME "modello"
vladkras

442

È possibile eseguire uno SQLDumpdei database (e i relativi dati), quindi cercare quel file.


20
Non dimenticare che puoi usare il flag --extended-insert = FALSE per mysqldump per rendere più leggibile l'output.
Benubird,

26
Nel caso ti stia chiedendo, come me, di cosa parla il commento a matita: snopes.com/business/genius/spacepen.asp
Jason Swett

2
Questo è il modo "standard" (di fatto) di cercare interi DB. Mi piace mysqldump -Tche crea due file per tabella in una directory specificata. Poi grep <search> *nella directory, e ciò che viene restituito è il file tablename.txt o .sql. Il file txt contiene i dati per la tabella (delimitato da tabulazione, rinomina in CSV per aprirlo in Excel) e sql contiene la definizione della tabella, avete indovinato: SQL. In questo modo stai cercando tutto ed è facile restringere la posizione dei tuoi dati. Tuttavia, questo metodo può essere abbastanza difficile far funzionare in determinati ambienti. Stack Overflow è molto utile qui.
Joel Mellon,

Quando hai un grande SQL, o forse in archivio, puoi aprirlo in MC direttamente sul server, quindi visualizzare-> Cerca
Vitaly Zdanevich,

1
Bel suggerimento! Ma non funzionerà se il file di dump del db è davvero grande (situazione che sto vivendo ora :))
Boban

207

Se phpMyAdmin è installato, utilizzare la funzione "Cerca".

  • Seleziona il tuo DB
  • Assicurati di avere un DB selezionato (ovvero non una tabella, altrimenti otterrai una finestra di ricerca completamente diversa)
  • Fai clic sulla scheda "Cerca"
  • Scegli il termine di ricerca che desideri
  • Scegli le tabelle da cercare

L'ho usato su un massimo di 250 database da tavolo / 10 GB (su un server veloce) e il tempo di risposta è a dir poco sorprendente.


8
Uno dei nostri database è 92,7 GB e questa opzione ha funzionato bene. Ottima soluzione
Tricky il

5
Dimentico sempre cosa può fare tutto phpMyAdmin. È un ottimo strumento!
Ville

1
Estremamente veloce e utile nel mio db Magento. Ho trovato il campo per i dati che stavo cercando in un paio di secondi, e anche tutte le altre tabelle a cui facevano riferimento.
mtrueblood,

1
MySQL Workbench ha anche questa funzione: "Database >> Cerca dati tabella ..."
matt wilkie

1
Bello! ora come sostituiresti la stringa cercata in phpmyadmin?
Pathros,

46

Funzione PHP:

function searchAllDB($search){
    global $mysqli;

    $out = "";

    $sql = "show tables";
    $rs = $mysqli->query($sql);
    if($rs->num_rows > 0){
        while($r = $rs->fetch_array()){
            $table = $r[0];
            $out .= $table.";";
            $sql_search = "select * from ".$table." where ";
            $sql_search_fields = Array();
            $sql2 = "SHOW COLUMNS FROM ".$table;
            $rs2 = $mysqli->query($sql2);
            if($rs2->num_rows > 0){
                while($r2 = $rs2->fetch_array()){
                    $column = $r2[0];
                    $sql_search_fields[] = $column." like('%".$search."%')";
                }
                $rs2->close();
            }
            $sql_search .= implode(" OR ", $sql_search_fields);
            $rs3 = $mysqli->query($sql_search);
            $out .= $rs3->num_rows."\n";
            if($rs3->num_rows > 0){
                $rs3->close();
            }
        }
        $rs->close();
    }

    return $out;
}

Questo è pho, per coloro che potrebbero non saperlo.
Nandostyle,

Impostare in $mysqliquesto modo:$mysqli = new mysqli('localhost', 'root', 'hunter2', 'my_database');
Adam Taylor

Inoltre, consiglio vivamente di sostituirlo $columcon in "`$colum`"modo che i campi che sono parole riservate non causino problemi
Adam Taylor


12

Se si sta evitando stored procedurescome la peste, o sono in grado di fare una mysql_dumpcausa di permessi, o l'esecuzione in altri vari motivi.

Suggerirei un approccio in tre fasi come questo:

1) Dove questa query crea un gruppo di query come set di risultati.

# =================
# VAR/CHAR SEARCH
# =================
# BE ADVISED USE ANY OF THESE WITH CAUTION
# DON'T RUN ON YOUR PRODUCTION SERVER 
# ** USE AN ALTERNATE BACKUP **

SELECT 
    CONCAT('SELECT * FROM ', A.TABLE_SCHEMA, '.', A.TABLE_NAME, 
           ' WHERE ', A.COLUMN_NAME, ' LIKE \'%stuff%\';') 
FROM INFORMATION_SCHEMA.COLUMNS A
WHERE 
            A.TABLE_SCHEMA != 'mysql' 
AND     A.TABLE_SCHEMA != 'innodb' 
AND     A.TABLE_SCHEMA != 'performance_schema' 
AND     A.TABLE_SCHEMA != 'information_schema'
AND     
        (
            A.DATA_TYPE LIKE '%text%'
        OR  
            A.DATA_TYPE LIKE '%char%'
        )
;

.

# =================
# NUMBER SEARCH
# =================
# BE ADVISED USE WITH CAUTION

SELECT 
    CONCAT('SELECT * FROM ', A.TABLE_SCHEMA, '.', A.TABLE_NAME, 
           ' WHERE ', A.COLUMN_NAME, ' IN (\'%1234567890%\');') 
FROM INFORMATION_SCHEMA.COLUMNS A
WHERE 
            A.TABLE_SCHEMA != 'mysql' 
AND     A.TABLE_SCHEMA != 'innodb' 
AND     A.TABLE_SCHEMA != 'performance_schema' 
AND     A.TABLE_SCHEMA != 'information_schema'
AND     A.DATA_TYPE IN ('bigint','int','smallint','tinyint','decimal','double')
;

.

# =================
# BLOB SEARCH
# =================
# BE ADVISED THIS IS CAN END HORRIFICALLY IF YOU DONT KNOW WHAT YOU ARE DOING
# YOU SHOULD KNOW IF YOU HAVE FULL TEXT INDEX ON OR NOT
# MISUSE AND YOU COULD CRASH A LARGE SERVER
SELECT 
    CONCAT('SELECT CONVERT(',A.COLUMN_NAME, ' USING utf8) FROM ', A.TABLE_SCHEMA, '.', A.TABLE_NAME, 
           ' WHERE CONVERT(',A.COLUMN_NAME, ' USING utf8) IN (\'%someText%\');') 
FROM INFORMATION_SCHEMA.COLUMNS A
WHERE 
            A.TABLE_SCHEMA != 'mysql' 
AND     A.TABLE_SCHEMA != 'innodb' 
AND     A.TABLE_SCHEMA != 'performance_schema' 
AND     A.TABLE_SCHEMA != 'information_schema'
AND     A.DATA_TYPE LIKE '%blob%'
;

I risultati dovrebbero apparire così:

Copia questi risultati in un'altra finestra di query

2) È quindi possibile solo Right Clicke utilizzare ilCopy Row (tab-separated)

inserisci qui la descrizione dell'immagine

3) Incolla i risultati in una nuova finestra di query ed esegui il contenuto del tuo cuore.

Dettaglio: escludo gli schemi di sistema che potresti non vedere di solito nel tuo banco di lavoro se non hai l'opzione Show Metadata and Internal Schemasselezionata.

Ho fatto questo per fornire un modo rapido a ANALYZEun intero HOST o DB, se necessario, o per eseguire OPTIMIZEdichiarazioni per supportare i miglioramenti delle prestazioni.

Sono sicuro che ci sono diversi modi in cui puoi fare questo, ma ecco cosa funziona per me:

-- ========================================== DYNAMICALLY FIND TABLES AND CREATE A LIST OF QUERIES IN THE RESULTS TO ANALYZE THEM
SELECT CONCAT('ANALYZE TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbname';

-- ========================================== DYNAMICALLY FIND TABLES AND CREATE A LIST OF QUERIES IN THE RESULTS TO OPTIMIZE THEM
SELECT CONCAT('OPTIMIZE TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbname';

Testato sulla versione MySQL: 5.6.23

ATTENZIONE: NON ESEGUIRE QUESTO SE:

  1. Ti preoccupi di causare i blocchi della tabella (tieni d'occhio le connessioni dei tuoi client)
  2. Non sei sicuro di ciò che stai facendo.

  3. Stai cercando di far arrabbiare il tuo DBA. (potresti avere persone alla tua scrivania con la rapidità .)

Saluti, Jay; -]


1
Sicuramente non è qualcosa che si desidera eseguire su un db live ma utile per alcune attività di debug. Ciò tuttavia non riesce se il tipo di colonna non viene confrontato con una stringa. Cioè una colonna int.
Michael Thessel,

Ottimo punto, ho aggiunto tre alternative per cercare tra blob, caratteri o ints. Questa è solo una generalizzazione e dovrebbe SEMPRE essere usata con ATTENZIONE. MAI sulla PRODUZIONE come hai menzionato, di solito è quello che ti fa licenziare "Trovare script su Internet e non capirli, ma ancora eseguirli" ma, ehi, è così che le persone imparano nel modo più duro.
JayRizzo,

8

Ho anche fatto il mio crawler mysql per cercare una configurazione di wordpress, non sono riuscito a trovarlo nell'interfaccia e nel database e i dump del database erano troppo pesanti e illeggibili. Devo dire che non posso farne a meno ora.

Funziona come quello di @Olivier, ma gestisce nomi di database / tabelle esotici ed è LIKE-joker sicuro.

<?php

$database = 'database';
$criteria = '*iemblo'; // you can use * and ? as jokers

$dbh = new PDO("mysql:host=127.0.0.1;dbname={$database};charset=utf8", 'root', '');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$tables = $dbh->query("SHOW TABLES");
while (($table = $tables->fetch(PDO::FETCH_NUM)) !== false)
{
    $fields = $dbh->prepare("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?");
    $fields->execute(array ($database, $table[0]));

    $ors = array ();
    while (($field = $fields->fetch(PDO::FETCH_NUM)) !== false)
    {
        $ors[] = str_replace("`", "``", $field[0]) . " LIKE REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(:search, '\\\\', '\\\\\\\\'), '%', '\\%'), '_', '\\_'), '*', '%'), '?', '_')";
    }

    $request = 'SELECT * FROM ';
    $request .= str_replace("`", "``", $table[0]);
    $request .= ' WHERE ';
    $request .= implode(' OR ', $ors);
    $rows = $dbh->prepare($request);

    $rows->execute(array ('search' => $criteria));

    $count = $rows->rowCount();
    if ($count == 0)
    {
        continue;
    }

    $str = "Table '{$table[0]}' contains {$count} rows matching '{$criteria}'.";
    echo str_repeat('-', strlen($str)), PHP_EOL;
    echo $str, PHP_EOL;
    echo str_repeat('-', strlen($str)), PHP_EOL;

    $counter = 1;
    while (($row = $rows->fetch(PDO::FETCH_ASSOC)) !== false)
    {
        $col = 0;
        $title = "Row #{$counter}:";
        echo $title;
        foreach ($row as $column => $value)
        {
            echo
            (($col++ > 0) ? str_repeat(' ', strlen($title) + 1) : ' '),
            $column, ': ',
            trim(preg_replace('!\s+!', ' ', str_replace(array ("\r", "\t", "\n"), array ("", "", " "), $value))),
            PHP_EOL;
        }
        echo PHP_EOL;
        $counter++;
    }
}

L'esecuzione di questo script potrebbe generare qualcosa di simile:

---------------------------------------------------
Table 'customers' contains 1 rows matching '*iemblo'.
---------------------------------------------------
Row #1: email_client: my@email.com
        numero_client_compta: C05135
        nom_client: Tiemblo
        adresse_facturation_1: 151, My Street
        adresse_facturation_2: 
        ville_facturation: Nantes
        code_postal_facturation: 44300
        pays_facturation: FR
        numero_tva_client: 
        zone_geographique: UE
        prenom_client: Alain
        commentaires: 
        nom_societe: 
        email_facturation: my@email.com

1
Ottengo questo errore: Errore irreversibile: eccezione non rilevata 'PDOException' con il messaggio 'SQLSTATE [42000]: errore di sintassi o violazione di accesso: 1064 Hai un errore nella sintassi SQL; controlla il manuale che corrisponde alla versione del tuo server MySQL per la sintassi corretta da usare vicino a 'tasto LIKE REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (' 180well * ',' \\ ',' \\\\ '),'% ',' alla linea 1 '
LLBBL

6

Questa è la query più semplice per recuperare tutte le colonne e le tabelle

SELECT * FROM information_schema.`COLUMNS` C WHERE TABLE_SCHEMA = 'YOUR_DATABASE'

Tutte le tabelle o quelle con una stringa specifica nel nome possono essere ricercate tramite la scheda Cerca in phpMyAdmin.

Buona query ... \ ^. ^ /


20
e i valori?
themhz,

6

Utilizzando MySQL Workbench è facile selezionare più tabelle ed eseguire una ricerca di testo in tutte quelle tabelle del DB ;-)


Grazie! La prima volta che ho usato il banco da lavoro. Era abbastanza intuitivo, mi ha indicato il tavolo di cui avevo bisogno e sono stato in grado di individuarlo da lì.
joshmiller,

6

Anche se questa domanda è vecchia, ecco come puoi farlo se stai usando mysql workbench 6.3. (Molto probabilmente funziona anche con altre versioni)

Fai clic con il pulsante destro del mouse sullo schema e su "Cerca dati tabella", inserisci il tuo valore e premi "Avvia ricerca". Questo è tutto.


6

Ecco la mia soluzione per questo

DROP PROCEDURE IF EXISTS findAll;
CREATE PROCEDURE `findAll`( IN `tableName` VARCHAR( 28 ) , IN `search` TEXT )
BEGIN
       DECLARE finished INT DEFAULT FALSE ;
       DECLARE columnName VARCHAR ( 28 ) ;
       DECLARE stmtFields TEXT ;
       DECLARE columnNames CURSOR FOR
              SELECT DISTINCT `COLUMN_NAME` FROM `information_schema`.`COLUMNS`
              WHERE `TABLE_NAME` = tableName ORDER BY `ORDINAL_POSITION` ;
       DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = TRUE;
       SET stmtFields = '' ;
       OPEN columnNames ;
       readColumns: LOOP
              FETCH columnNames INTO columnName ;
              IF finished THEN
                     LEAVE readColumns ;
              END IF;
              SET stmtFields = CONCAT(
                     stmtFields , IF ( LENGTH( stmtFields ) > 0 , ' OR' , ''  ) ,
                     ' `', tableName ,'`.`' , columnName , '` REGEXP "' , search , '"'
              ) ;
       END LOOP;
       SET @stmtQuery := CONCAT ( 'SELECT * FROM `' , tableName , '` WHERE ' , stmtFields ) ;
       PREPARE stmt FROM @stmtQuery ;
       EXECUTE stmt ;
       CLOSE columnNames ;
END;

1
quando corro CALL findAll('tbl_test','abb'), mi manca questo errore: # 1267 - Mix illegale di regole di confronto (utf8_general_ci, IMPLICIT) e (utf8_unicode_ci, IMPLICIT) per l'operazione '=' Riesci a risolverlo? Grazie!
Davuz,

6

Questo è il modo semplice che conosco. Seleziona il tuo DB in PHPMyAdmin e vai alla scheda "Cerca" e scrivi ciò che vuoi trovare e dove vuoi cercare. Seleziona tutte le tabelle se cercherai le parole da tutte le tabelle. Quindi "GO" e guarda il risultato.Voglio trovare la parola VCD (backdoor) dal mio DB Wordpress per la cancellazione


5

Uso HeidiSQL è uno strumento utile e affidabile progettato per gli sviluppatori Web che utilizzano il famoso server MySQL.

In HeidiSQL puoi premere shift + ctrl + f e puoi trovare del testo sul server in tutte le tabelle. Questa opzione è molto utile.


+1 Sembra fare bene il lavoro ed è uno strumento utile che salva il faff coinvolto in alcune delle altre risposte. Vale anche la pena notare che ti permette di scegliere in quale database cercare.
Steve Chambers

3

Puoi usare

SHOW TABLES;

Quindi ottenere le colonne in quelle tabelle (in un ciclo) con

SHOW COLUMNS FROM table;

e poi con quelle informazioni crea molte domande che puoi anche UNION se necessario.

Ma questo è estremamente pesante nel database. Soprattutto se stai effettuando una ricerca COME.


SHOW TABLES FROM <db_name>è più preciso
Vladkras il

3

Questa soluzione
a) è solo MySQL, non è necessaria altra lingua
eb) restituisce risultati SQL, pronti per l'elaborazione!

#Search multiple database tables and/or columns
#Version 0.1 - JK 2014-01
#USAGE: 1. set the search term @search, 2. set the scope by adapting the WHERE clause of the `information_schema`.`columns` query
#NOTE: This is a usage example and might be advanced by setting the scope through a variable, putting it all in a function, and so on...

#define the search term here (using rules for the LIKE command, e.g % as a wildcard)
SET @search = '%needle%';

#settings
SET SESSION group_concat_max_len := @@max_allowed_packet;

#ini variable
SET @sql = NULL;

#query for prepared statement
SELECT
    GROUP_CONCAT("SELECT '",`TABLE_NAME`,"' AS `table`, '",`COLUMN_NAME`,"' AS `column`, `",`COLUMN_NAME`,"` AS `value` FROM `",TABLE_NAME,"` WHERE `",COLUMN_NAME,"` LIKE '",@search,"'" SEPARATOR "\nUNION\n") AS col
INTO @sql
FROM `information_schema`.`columns`
WHERE TABLE_NAME IN
(
    SELECT TABLE_NAME FROM `information_schema`.`columns`
    WHERE
        TABLE_SCHEMA IN ("my_database")
        && TABLE_NAME IN ("my_table1", "my_table2") || TABLE_NAME LIKE "my_prefix_%"
);

#prepare and execute the statement
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Per questi tipi di soluzione di solito aggiungerli a phpfiddler sarebbe bello, quindi la gente può dare un'occhiata e persino commentare la tua soluzione. :)
pal4life,

Ricevo un errore #1243 - Unknown prepared statement handler (stmt) given to EXECUTEquando eseguo la tua query in Phpmyadmin per la ricerca nell'intero database
Vicky Dev

@VickyDev So che è passato più di un anno dalla tua domanda. Scusate. Tuttavia: penso che ci sia qualcos'altro che non va nella tua sceneggiatura poiché stmt è dichiarato nella riga sopra EXECUTE. Quale versione di MySQL stai usando?
Chonez,

2

Ho modificato un po 'la risposta PHP di Olivier a:

  • stampa i risultati in cui è stata trovata la stringa
  • omettere le tabelle senza risultati
  • mostra anche l'output se i nomi delle colonne corrispondono all'input di ricerca
  • mostra il numero totale di risultati

    function searchAllDB($search){
        global $mysqli;
    
        $out = "";
        $total = 0;
        $sql = "SHOW TABLES";
        $rs = $mysqli->query($sql);
        if($rs->num_rows > 0){
            while($r = $rs->fetch_array()){
                $table = $r[0];
                $sql_search = "select * from ".$table." where ";
                $sql_search_fields = Array();
                $sql2 = "SHOW COLUMNS FROM ".$table;
                $rs2 = $mysqli->query($sql2);
                if($rs2->num_rows > 0){
                    while($r2 = $rs2->fetch_array()){
                        $colum = $r2[0];
                        $sql_search_fields[] = $colum." like('%".$search."%')";
                        if(strpos($colum,$search))
                        {
                            echo "FIELD NAME: ".$colum."\n";
                        }
                    }
                    $rs2->close();
                }
                $sql_search .= implode(" OR ", $sql_search_fields);
                $rs3 = $mysqli->query($sql_search);
                if($rs3 && $rs3->num_rows > 0)
                {
                    $out .= $table.": ".$rs3->num_rows."\n";
                    if($rs3->num_rows > 0){
                        $total += $rs3->num_rows;
                        $out.= print_r($rs3->fetch_all(),1);
                        $rs3->close();
                    }
                }
            }
            $out .= "\n\nTotal results:".$total;
            $rs->close();
        }
        return $out;
    }

1

Ho costruito su una risposta precedente e ho questo, qualche imbottitura extra solo per poter unire comodamente tutto l'output:

SELECT 
CONCAT('SELECT ''',A.TABLE_NAME, '-' ,A.COLUMN_NAME,''' FROM ', A.TABLE_SCHEMA, '.', A.TABLE_NAME, 
       ' WHERE ', A.COLUMN_NAME, ' LIKE \'%Value%\' UNION')
FROM INFORMATION_SCHEMA.COLUMNS A
WHERE 
        A.TABLE_SCHEMA != 'mysql' 
AND     A.TABLE_SCHEMA != 'innodb' 
AND     A.TABLE_SCHEMA != 'performance_schema' 
AND     A.TABLE_SCHEMA != 'information_schema'
UNION SELECT 'SELECT '''

-- for exact match use: A.COLUMN_NAME, ' LIKE \'Value\' instead

Prima esegui questo, quindi incolla ed esegui il risultato (nessuna modifica) e verranno visualizzati tutti i nomi e le colonne della tabella in cui viene utilizzato il valore.


1
Quattro controlli su un valore di colonna non sono il modo più semplice. Potresti / dovresti WHERE NOT A.TABLE_SCHEMA IN ('mysql', 'innodb', 'performance_schema', 'information_schema')o anche meglio, eseguirlo, controllare gli schemi utilizzati e impostare lo schema usato nel punto invece di escludere tutti gli altri.
Bradbury9,

1

l'ho fatto funzionare. devi solo cambiare le variabili

$query ="SELECT `column_name` FROM `information_schema`.`columns` WHERE `table_schema`='" . $_SESSION['db'] . "' AND `table_name`='" . $table . "' ";
$stmt = $dbh->prepare($query);
$stmt->execute(); 
$columns = $stmt->fetchAll(PDO::FETCH_ASSOC);       

$query="SELECT name FROM `" . $database . "`.`" . $table . "` WHERE ( ";
foreach ( $columns as $column ) {
    $query .=" CONVERT( `" . $column['column_name'] . "` USING utf8 ) LIKE '%" . $search . "%' OR ";
}
$query = substr($query, 0, -3);
$query .= ")";

echo $query . "<br>";
$stmt=$dbh->prepare($query);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "<pre>";
print_r ($results );
echo "</pre>";

1

L'ho fatto usando HeidiSQL. Non è facile da trovare, ma premendo Ctrl + Maiusc + F viene visualizzata la finestra di dialogo "Strumenti tabella". Quindi selezionare ciò che si desidera cercare (dal database completo alla singola tabella) e immettere il valore "Testo da trovare" e fare clic su "Trova". L'ho trovato sorprendentemente veloce (870 MiB db in meno di un minuto)


0

Ho usato Union per mettere insieme le query. Non so se è il modo più efficiente, ma funziona.

SELECT * FROM table1 WHERE name LIKE '%Bob%' Union
SELCET * FROM table2 WHERE name LIKE '%Bob%';

Il problema con questa risposta è che esiste un numero variabile e
sconosciuto

0

C'è una bella biblioteca per leggere tutti i tavoli, ridona

$database = new ridona\Database('mysql:dbname=database_name;host=127.0.0.1', 'db_user','db_pass');

foreach ($database->tables()->by_entire() as $row) {

....do

}

0

Non so se questo è solo nelle versioni recenti, ma facendo clic destro Tablessull'opzione nel Navigatorriquadro si apre un'opzione chiamata Search Table Data. Questo apre una casella di ricerca in cui si compila la stringa di ricerca e si preme la ricerca.

È necessario selezionare la tabella in cui si desidera cercare nel riquadro sinistro. Ma se tieni premuto MAIUSC e selezioni come 10 tabelle alla volta, MySql può gestirlo e restituire i risultati in pochi secondi.

Per chiunque cerchi opzioni migliori! :)


In quale applicazione stai facendo tutto questo?
Jon Schneider,

Sta usando l'applicazione Navigator.
Damir Olejar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.