Шукайте у всіх полях з кожної таблиці бази даних MySQL


298

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

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

Чи можна зробити щось подібне?


2
Цей блог може бути корисним: winashwin.wordpress.com/2012/08/28/mysql-search

Відповіді:


81

Ви можете зазирнути в information_schema схему. У ньому є список усіх таблиць і всіх полів, які знаходяться в таблиці. Потім ви можете запускати запити, використовуючи інформацію, яку ви отримали з цієї таблиці.

Задіяні таблиці: SCHEMATA, TABLES та COLUMNS. Існують такі зовнішні ключі, за допомогою яких ви можете точно скласти, як таблиці створюються в схемі.


49
це не відповідь, яку я хотів, але я повинен прийняти правду. : D Дякую
RSilva

1
Це правильно, але відповідь @Dan Rather теж допомогла, тому що db, який я переглядав, був незрозумілим налаштуванням, і я не міг зрозуміти, яке ім’я стовпця чи таблиця буде впевнений, просто дивлячись ...
DrCord

12
information_schemaце база даних, а не таблиця. Деякі роз’яснення, за якою таблицею слід шукати, information_schemaбуло б добре!
CaptSaltyJack

3
Мені якось весело, що MySql не дозволив шукати всі таблиці. Здається, досить гарний варіант
Каньйон Колоб

@KolobCanyon MySQL надає можливість зробити це через SHOW TABLES OF db_name LIKE 'pattern'
vladkras

442

Ви можете зробити SQLDumpз бази даних (та її даних), а потім виконати пошук у цьому файлі.


20
Не забувайте, що ви можете використовувати --extended-insert = FALSE прапор для mysqldump, щоб зробити результат більш читабельним.
Benubird

26
Якщо ви цікавитесь, як я, про що йдеться у коментарі олівця: snopes.com/business/genius/spacepen.asp
Jason Swett

2
Це "стандартний" (фактично) спосіб пошуку цілих БД. Мені подобається, mysqldump -Tщо створюється два файли на таблицю у вказаному каталозі. Я тоді grep <search> *в режимі, і повертається файл tablename.txt або .sql. Файл txt містить дані для таблиці (розділена вкладка, перейменувати в csv, щоб відкрити в Excel), а sql містить визначення таблиці в, ви здогадалися: SQL. Таким чином ви шукаєте все, і їх легко звузити, де є ваші дані. Цей метод може бути досить важким для роботи в певних умовах. Тут дуже корисна переповнення стека.
Джоел Меллон

Коли у вас є великий SQL або, можливо, в архіві - ви можете відкрити його в MC прямо на сервері, потім перегляньте-> Пошук
Віталій Зданевич

1
Приємна пропозиція! Але це не спрацює, якщо db-дамп-файл дійсно великий (ситуація, яка зараз у мене :))
Бобан

207

Якщо у вас встановлений phpMyAdmin, використовуйте його функцію "Пошук".

  • Виберіть свою БД
  • Переконайтеся, що у вас вибрано БД (тобто не таблицю, інакше ви отримаєте зовсім інше діалогове вікно пошуку)
  • Перейдіть на вкладку "Пошук"
  • Виберіть потрібний термін пошуку
  • Виберіть таблиці для пошуку

Я використовував це на до 250 базах даних таблиці / 10 ГБ (на швидкому сервері), і час відповіді - це не дивовижне.


8
Одна з наших баз даних - 92,7 Гбіт, і ця опція спрацювала чудово. Чудове рішення
Tricky

5
Я завжди забуваю, що все phpMyAdmin може зробити. Це чудовий інструмент!
Віль

1
Надзвичайно швидкий і корисний у моєму Magento db. Знайшов поле для тих даних, які я шукав за пару секунд, а також для всіх інших таблиць, на які посилався.
mtrueblood

1
MySQL Workbench також має цю особливість: "База даних >> Дані таблиці пошуку ..."
matt wilkie

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 або DB, якщо потрібно, або запустити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 (слідкуйте за клієнтськими підключеннями)
  2. Ви не впевнені в тому, що робите.

  3. Ви намагаєтесь гнівати вас на DBA. (Можливо , є люди на вашому столі з спритністю .)

Ура, Джей; -]


1
Однозначно не те, що ви хочете запустити на живому db, але корисне для певних завдань налагодження. Це не вдається, якщо тип стовпця не порівнює з рядком. Тобто стовпець int.
Майкл Тессел

Відмінно, я додав три варіанти пошуку через краплі, символи чи вставки. Це просто узагальнення, і КОЛИ ВИНАГО використовуватимуться ОБЕРЕЖНО. НІКОЛИ не в виробництві, як ви згадували, як правило, це вас звільняє "Пошук сценаріїв в Інтернеті та не розуміння їх, але все ще їх виконання", але, так, люди навчаються на важкому шляху.
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 (REPLACE (REPLACE ('180well *' ') ',' у рядку 1 '
LLBBL

6

Це найпростіший запит для отримання всіх стовпців і таблиць

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

Усі таблиці або таблиці з певним рядком в імені можна шукати через вкладку Пошук в phpMyAdmin.

Приємного запиту ... \ ^. ^ /


20
а як щодо значень?
themhz

6

За допомогою MySQL Workbench легко вибрати кілька таблиць та запустити пошук тексту у всіх цих таблицях БД ;-)


Дякую! Перший раз я використовував верстат. Був досить інтуїтивно зрозумілим, він вказував мені на потрібний мені стіл, і я зміг його знайти звідти.
Джошміллер

6

Хоча це питання давнє, ось як це можна зробити, якщо ви використовуєте mysql workbench 6.3. (Швидше за все, це працює і для інших версій)

Клацніть правою кнопкою миші вашу схему та "Дані пошуку таблиці", введіть значення та натисніть "Почати пошук". Це воно.


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 (backdoor) з моєї БД Wordpress для видалення


5

Я використовую HeidiSQL - це корисний і надійний інструмент, розроблений для веб-розробників за допомогою популярного сервера MySQL.

У HeidiSQL ви можете натиснути shift + ctrl + f, і ви можете знайти текст на сервері у всіх таблицях. Цей варіант дуже корисний.


+1 Здається, що робота добре виконується і є корисним інструментом, який зберігає фаф, причетний до деяких інших відповідей. Також варто зазначити, що вона дозволяє вам вибрати, в якій базі даних шукати.
Стів Чемберс

3

Ви можете використовувати

SHOW TABLES;

Потім отримайте стовпці в цих таблицях (у циклі) з

SHOW COLUMNS FROM table;

а потім з цією інформацією створіть безліч запитів, які ви також можете об'єднати, якщо вам потрібно.

Але це надзвичайно важко в базі даних. Особливо, якщо ви робите пошук ПОДІЛКИ.


SHOW TABLES FROM <db_name>точніше
vladkras

3

Це рішення
a) є лише 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;

Для подібних рішень зазвичай додавання їх до phpfiddler було б непогано, щоб люди могли подивитися і навіть прокоментувати ваше рішення. :)
pal4life

Я отримую помилку, #1243 - Unknown prepared statement handler (stmt) given to EXECUTEколи запускаю ваш запит у Phpmyadmin для пошуку у всій базі даних
Vicky Dev

@VickyDev Я знаю, що минуло більше року з мого питання. Вибачте. Тим не менш: я думаю, що у вашому сценарії щось інше не так, оскільки stmt оголошено в рядку над EXECUTE. Яку версію MySQL ви використовуєте?
Chonez

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

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 Мбіт дб за менше хвилини)


0

Я використовував Union, щоб об'єднати запити. Не знаю, чи це найефективніший спосіб, але він працює.

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

Проблема з цією відповіддю полягає в тому, що існує змінна та незвідана кількість таблиць
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

}

0

Я не знаю, чи це лише в останніх версіях, але клацання правою кнопкою миші на Tablesопції на Navigatorпанелі з'являється опція, що називаєтьсяSearch Table Data . Це відкриває вікно пошуку, де ви заповнюєте рядок пошуку та натискаєте пошук.

Вам потрібно вибрати таблицю, в якій потрібно шукати, на лівій панелі. Але якщо ви утримуєте зсув і вибираєте, як 10 таблиць одночасно, MySql може впоратися з цим і повернути результати за секунди.

Для всіх, хто шукає кращих варіантів! :)


У якій програмі ви все це робите?
Джон Шнайдер

Він використовує додаток Навігатор.
Дамір Олежар
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.