Поиск и замена (если нужна) по всей базе
Скачать

<?php

// Ищем...
$search        = 'www.old-site.ru'; // Например: 'www.old-site.ru'

// Меняем на... Используется при $queryType = 'replace'
$replace    = 'www.new-site.ru'; // Например: 'www.new-site.ru'
//Следует иметь ввиду что поиском находятся вхождения без учета регистра, а правятся с цчетом,
//поэтому после замены стоит для проверки запустить поиск еще раз

// Варианты значения переменной $queryType 'search' (вывод результатов поиска) или 'replace' (поиск с заменой)
$queryType = 'search';

// Настройки базы данных
$hostname = "mysql-hostname";
$username = "mysql-username";
$password = "mysql-password";
$database = "databasename";


// Показывать ошибки или нет (true/false)
$showErrors = true;

//показать все колонки, где велся поиск
$showAllTableColumns = false;

//показать запросы (может быть полезно если понадобится смотреть детально что там за данные)
$showQuery = true;

//массив таблиц, в которых НЕ требуется поиск
$tablesNotChange = array(
    //'setup_module',
    //'theme',
    //'eav_attribute_group',
);

$columnTypes = array(
    'varchar',
    'tinytext',
    'text',
    'mediumtext',
    'longtext',
    'char',
    'blob',
);

if($showErrors) {
    error_reporting(E_ALL);
    ini_set('error_reporting', E_ALL);
    ini_set('display_errors',1);
}

$mysqli = mysqli_connect($hostname, $username, $password, $database);

if ($mysqli->connect_errno) {
    printf("Can't connect to mysql server\n", $mysqli->connect_error);
    exit();
}

$tables = array();

$resTables = $mysqli->query('SHOW TABLES');

while ($table = $resTables->fetch_assoc()) {
    $tables[] = $table['Tables_in_'.strtolower($database)];
}

$resTables->close();

$rowHeading = ($queryType=='replace') ? 
        'Replacing \''.$search.'\' with \''.$replace.'\' in \''.$database."'\n\nSTATUS    |    ROWS AFFECTED    |    TABLE/FIELD    (+ERROR)\n"
      : 'Searching for \''.$search.'\' in \''.$database."'\n\nSTATUS    |    ROWS CONTAINING    |    TABLE/FIELD    (+ERROR)\n";

$output = $rowHeading;

foreach($tables as $table) {

    if (in_array($table, $tablesNotChange)) {
        continue;
    }
 
    $resFields = $mysqli->query('SHOW FIELDS FROM '.$table);
    
    foreach($resFields as $fieldData) {
        
        $field = $fieldData['Field'];
        $type = $fieldData['Type'];
        
        $numSymb = strpos($type, '(');
        if ($numSymb !== false) {
            $type = substr($type, 0, $numSymb);
        }
        
        if (!in_array(strtolower($type), $columnTypes)) {
            continue;
        }

        $handle = $table.'_'.$field;

        if($queryType=='replace') {
            $sqlColumn = 'UPDATE '.$table.' SET '.$field.' = REPLACE('.$field.',\''.$search.'\',\''.$replace.'\')';
        } else {
            $sqlColumn = 'SELECT * FROM '.$table.' WHERE '.$field.' LIKE(\'%'.$search.'%\')';
        }

        $result = $mysqli->query( $sqlColumn );

        $rowsCount = $mysqli->affected_rows;
        $error = $mysqli->error;

        if ($showAllTableColumns || $rowsCount > 0) {
            $output .= ($result) ? 'OK        ' : '--        ';
            $output .= ($rowsCount>0) ? '<strong>'.$rowsCount.'</strong>            ' : '<span style="color:#CCC">'.$rowsCount.'</span>            ';
            $fieldName = '`'.$table.'`.`'.$field.'`';
            $output .= $fieldName;
            $erTab = str_repeat(' ', (60-strlen($fieldName)) );
            $output .= ($error) ? $erTab.'(ERROR: '.$error.')' : '';
            
            if ($showQuery) {
                $output .=  '        '.$sqlColumn; 
            }
            
            $output .= "\n";              
        }
    }
    
    $resFields->close();
}

echo $output."\n";