Поиск по всем полям из каждой таблицы базы данных MySQL

298

Я хочу найти во всех полях из всех таблиц базы данных MySQL заданную строку, возможно, используя синтаксис как:

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

Можно ли сделать что-то подобное?

RSilva
источник
2
Этот блог может быть полезен: winashwin.wordpress.com/2012/08/28/mysql-search

Ответы:

81

Вы можете заглянуть в information_schemaсхему. Он имеет список всех таблиц и всех полей, которые находятся в таблице. Затем вы можете выполнять запросы, используя информацию, полученную из этой таблицы.

Используются таблицы SCHEMATA, TABLES и COLUMNS. Существуют внешние ключи, которые позволяют точно создать таблицы в схеме.

Милхаус
источник
49
это не тот ответ, который я хотел, но я должен принять правду. : D Спасибо
RSilva
1
Это правильно, но ответ @Dan Rather тоже помог, потому что БД, которую я просматривал, был неясным, и я не мог понять, каким будет имя столбца или таблицы, просто посмотрев ...
DrCord
12
information_schemaэто база данных, а не таблица. Некоторые уточнения, по какой таблице искать, information_schemaбыло бы хорошо!
CaptSaltyJack
3
Для меня довольно забавно, что MySql не предоставляет возможности поиска по всем таблицам. Похоже, довольно рудиментарный вариант
Каньон Колоб
@KolobCanyon MySQL предоставляет возможность сделать это с помощью ПОКАЗАТЬ ТАБЛИЦЫ ОТ db_name, КАК 'pattern'
vladkras
442

Вы можете сделать SQLDumpиз базы данных (и ее данных), а затем искать этот файл.

Дин Ратер
источник
20
Не забудьте, что вы можете использовать --extended-insert = FALSE флаг для mysqldump, чтобы сделать вывод более читабельным.
Benubird
26
В случае, если вам интересно, как и мне, о чем говорит карандашный комментарий: snopes.com/business/genius/spacepen.asp
Джейсон Светт,
2
Это «стандартный» (де-факто) способ поиска по всем БД. Мне нравится, mysqldump -Tкоторый создает два файла на таблицу в указанном каталоге. Затем я grep <search> *в директории, и возвращается файл tablename.txt или .sql. Файл txt содержит данные для таблицы (разделитель табуляции, переименование в csv для открытия в Excel), а sql содержит определение таблицы, как вы уже догадались: SQL. Таким образом, вы ищите все, и вы легко сможете определить, где находятся ваши данные. Этот метод может быть довольно трудным для работы в определенных условиях. Переполнение стека очень полезно здесь.
Джоэл Меллон
Если у вас большой SQL или, может быть, в архиве - вы можете открыть его в MC прямо на сервере, а затем просмотреть-> Поиск
Виталий Зданевич
1
Хорошее предложение! Но это не будет работать, если файл дампа БД очень большой (ситуация, которая у меня сейчас :))
Бобан,
207

Если у вас установлен phpMyAdmin, используйте функцию «Поиск».

  • Выберите свою БД
  • Убедитесь, что у вас выбрана БД (т.е. не таблица, иначе вы получите совершенно другой диалог поиска)
  • Нажмите вкладку «Поиск»
  • Выберите искомое условие
  • Выберите таблицы для поиска

Я использовал это до 250 таблиц / 10 ГБ баз данных (на быстром сервере), и время отклика просто удивительно.

Грег Лион
источник
8
Одна из наших баз данных - 92,7 Гб, и эта опция работала просто отлично. Отличное решение
Хитрый
5
Я всегда забываю, что может сделать весь phpMyAdmin. Это отличный инструмент!
Вилле
1
Очень быстрый и полезный в моем Magento DB. Через пару секунд нашел поле для данных, которые я искал, а также все другие таблицы, которые на него ссылались.
mtrueblood
1
MySQL Workbench также имеет эту функцию: «База данных >> Поиск в таблице данных ...»
Мэтт Уилки
1
Ницца! Теперь, как бы вы заменили искомую строку в phpmyadmin?
Патрос
46

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;
}
Оливье
источник
Это фо, для тех, кто может не знать.
Нандостиль
Установите $mysqliтак:$mysqli = new mysqli('localhost', 'root', 'hunter2', 'my_database');
Адам Тейлор
Кроме того, я настоятельно рекомендую заменить $columна "`$colum`"так, чтобы поля, которые являются зарезервированными словами, не вызывали проблем
Адам Тейлор
41

Вы можете использовать этот проект: http://code.google.com/p/anywhereindb

Это будет искать все данные во всей таблице.


источник
Больше не работает для PHP7. (mysql_connect устарел в PHP 5.5.0, удален в PHP 7.0.0)
iDev247
12

Если вы избегаете, stored proceduresкак чума, или не можете сделать это mysql_dumpиз-за разрешений или сталкиваетесь с другими различными причинами.

Я хотел бы предложить трехэтапный подход, как это:

1) Где этот запрос строит группу запросов в качестве результирующего набора.

# =================
# 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%'
;

Результаты должны выглядеть так:

Скопируйте эти результаты в другое окно запроса

2) Затем вы можете просто Right Clickи использоватьCopy Row (tab-separated)

введите описание изображения здесь

3) Вставьте результаты в новое окно запроса и запустите до вашего сердца.

Подробно: я исключаю системные схемы, которые вы обычно не видите в своем рабочем месте, если у вас не выбрана опция Show Metadata and Internal Schemas.

Я сделал это для обеспечения быстрого доступа ко ANALYZEвсему HOST или БД, если это необходимо, или для запуска OPTIMIZEоператоров для поддержки повышения производительности.

Я уверен, что есть разные способы сделать это, но вот что работает для меня:

-- ========================================== 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';

Проверено на версии MySQL: 5.6.23

ВНИМАНИЕ: НЕ БЕГИТЕ, ЕСЛИ:

  1. Вы обеспокоены тем, чтобы вызывать Table-lock (следите за вашими клиентскими подключениями)
  2. Вы не уверены в том, что делаете.

  3. Вы пытаетесь разозлить вас, администратор БД. (Вы можете иметь людей за столом с быстротой .)

Ура, Джей; -]

JayRizzo
источник
1
Определенно не то, что вы хотите запустить на живом БД, но полезно для определенных задач отладки. Это терпит неудачу, хотя, если тип столбца не сравнивается со строкой. Т.е. столбец int.
Майкл Тессел
Замечательно, я добавил три альтернативы для поиска по BLOB-объектам, символам или целым числам. Это всего лишь обобщение, и его следует ВСЕГДА использовать с ВНИМАНИЕМ. НИКОГДА о ПРОИЗВОДСТВЕ, как вы уже упоминали, обычно вас увольняют: «Выискиваете скрипты в интернете и не понимаете их, но все же запускаете их», но, эй, так люди учатся трудным путем.
JayRizzo
8

Я также сделал свой собственный сканер mysql для поиска какой-либо конфигурации wordpress, не смог найти ее и в интерфейсе, и в базе данных, а дампы базы данных были слишком тяжелыми и нечитаемыми. Я должен сказать, что не могу обойтись без этого сейчас.

Он работает как @Olivier, но управляет экзотическими именами баз данных / таблиц и безопасен как LIKE-joker.

<?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++;
    }
}

Запуск этого скрипта может вывести что-то вроде:

---------------------------------------------------
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
Я получаю эту ошибку: Неустранимая ошибка: необработанное исключение «PDOException» с сообщением «SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с ключом LIKE REPLACE (REPLACE (REPLACE (REPLACE ('180well *', '\\', '\\\\'), '%) ',' в строке 1 '
LLBBL
6

Это самый простой запрос для извлечения всех столбцов и таблиц.

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

Все таблицы или таблицы с определенной строкой в ​​имени можно найти на вкладке Поиск в phpMyAdmin.

Приятного запроса ... \ ^. ^ /

Аджи
источник
20
а как насчет значений?
Мехз
6

Используя MySQL Workbench, легко выбрать несколько таблиц и запустить поиск текста во всех этих таблицах БД ;-)

Фред Кристоф
источник
Спасибо! Первый раз я использовал верстак. Был довольно интуитивно понятен, он указал мне на стол, который мне был нужен, и я смог найти его оттуда.
Джошмиллер
6

Хотя этот вопрос старый, вот как вы можете это сделать, если используете mysql workbench 6.3. (Скорее всего, это также работает для других версий)

Щелкните правой кнопкой мыши свою схему и «Поиск в таблице данных», введите свое значение и нажмите «Начать поиск». Это оно.

Rpant
источник
6

Вот мое решение для этого

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
при запуске CALL findAll('tbl_test','abb')я пропускаю эту ошибку: # 1267 - Недопустимое сочетание параметров сортировки (utf8_general_ci, IMPLICIT) и (utf8_unicode_ci, IMPLICIT) для операции '=' Вы можете это исправить? Спасибо!
Давуз
6

Это простой способ, который я знаю. Выберите свою БД в PHPMyAdmin и перейдите на вкладку «Поиск» и напишите, что вы хотите найти и где вы будете искать. Выберите все таблицы, если вы будете искать слова из всех таблиц. Тогда «ИДТИ» и посмотрите результат.Я хочу найти слово VCD (бэкдор) из моей Wordpress DB для удаления

ardan7779
источник
5

Я использую HeidiSQL - полезный и надежный инструмент, разработанный для веб-разработчиков, использующих популярный сервер MySQL.

В HeidiSQL вы можете нажать shift + ctrl + f и найти текст на сервере во всех таблицах. Эта опция очень полезна.

Лев К.
источник
+1 Кажется, хорошо справляется со своей работой и является полезным инструментом, который сохраняет ошибки, связанные с некоторыми другими ответами. Также стоит отметить, что он позволяет вам выбирать, в каких базах данных искать.
Стив Чэмберс
3

Вы могли бы использовать

SHOW TABLES;

Затем получите столбцы в этих таблицах (в цикле) с

SHOW COLUMNS FROM table;

и затем с этой информацией создайте много запросов, которые вы также можете UNION, если вам нужно.

Но это чрезвычайно тяжело для базы данных. Особенно, если вы делаете поиск, как.

Олафур Вааге
источник
SHOW TABLES FROM <db_name>точнее
владкрас
3

Это решение
а) является только MySQL, никакой другой язык не нужен, и
б) возвращает результаты SQL, готовые к обработке!

#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;
Chonez
источник
Для такого рода решений было бы неплохо добавить их в phpfiddler, чтобы люди могли посмотреть и даже прокомментировать ваше решение. :)
pal4life
Я получаю сообщение об ошибке #1243 - Unknown prepared statement handler (stmt) given to EXECUTEпри выполнении запроса в Phpmyadmin для поиска по всей базе данных
Vicky Dev
@ VickyDev Я знаю, что с твоего вопроса прошло больше года. Сожалею. Тем не менее: я думаю, что-то еще не так в вашем скрипте, так как stmt объявлен в строке выше EXECUTE. Какую версию MySQL вы используете?
Чонес
2

Я немного изменил ответ Оливье на PHP:

  • распечатать результаты, в которых была найдена строка
  • пропустить таблицы без результатов
  • также показывать вывод, если имена столбцов соответствуют входным данным поиска
  • показать общее количество результатов

    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;
    }
Flion
источник
1

Я основывался на предыдущем ответе, и у меня есть некоторые дополнительные отступы, чтобы можно было легко объединить все результаты:

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

Сначала вы запустите это, затем вставьте и запустите результат (без редактирования), и он отобразит все имена таблиц и столбцы, в которых используется значение.

Джим Бьёрклунд
источник
1
Четыре проверки значения столбца - не самый простой способ. Вы можете / должны WHERE NOT A.TABLE_SCHEMA IN ('mysql', 'innodb', 'performance_schema', 'information_schema')или даже лучше, выполнить его, проверить используемые схемы и установить используемую схему вместо, вместо всех остальных.
bradbury9
1

Я получил это на работу. вам просто нужно изменить переменные

$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

Я сделал это с помощью HeidiSQL. Это не легко найти, но нажав Ctrl + Shift + F, он отображает диалог «инструменты таблицы». Затем выберите то, что вы хотите найти (от полной базы данных до одной таблицы), введите значение «Текст для поиска» и нажмите «Найти». Я нашел это удивительно быстро (870 МБ дБ меньше чем за минуту)

R1CHY_RICH
источник
0

Я использовал Union для объединения запросов. Не знаю, если это самый эффективный способ, но он работает.

SELECT * FROM table1 WHERE name LIKE '%Bob%' Union
SELCET * FROM table2 WHERE name LIKE '%Bob%';
mrmills129
источник
Проблема с этим ответом состоит в том, что существует переменное и неизвестное количество таблиц
bradbury9
0

Есть хорошая библиотека для чтения всех таблиц, ридона

$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

}
mirhossein
источник
0

Я не знаю, является ли это только в последних версиях, но при щелчке правой кнопкой мыши на Tablesопции в Navigatorпанели появляется опция под названием Search Table Data. Это открывает окно поиска, где вы заполняете строку поиска и нажимаете кнопку поиска.

Вам нужно выбрать таблицу, в которой вы хотите искать на левой панели. Но если вы удерживаете Shift и выбираете около 10 таблиц одновременно, MySql может обработать это и вернуть результаты в считанные секунды.

Для тех, кто ищет лучшие варианты! :)

Сумасшедший огурец
источник
В каком приложении вы все это делаете?
Джон Шнайдер
Он использует приложение Навигатор.
Дамир Олехар